题目
三言两语
开始回顾自己之前刷的题。然后,看到这题,输出是输入的窗口的编号,还在头疼编号怎么处理,用字典来存储吗?然后,翻看自己之前的代码,之前我是用窗口坐标二维数组的第5列来存储编号。hhhhh我真是个小机灵鬼~(自己之前敲得代码一个月不到就忘了,果然,你永远不可能两次踏进同一条河...)
C++解题:
#include <iostream>
using namespace std;
int main(){
//输入【这边当时用C++敲的时候,m,n没留意,和题目里是相反的,看代码的时候得留意一下】
int m,n;
// cout<<"输入M和N:"; //M表示窗口数;N表示点击次数
cin>>m>>n;
int m_arr[m][5];
int n_arr[n][2];
for(int i=0;i<m;i++){
for(int j=0;j<4;j++){
cin>>m_arr[i][j];
}
m_arr[i][4]=i+1;
}
for(int i=0;i<n;i++){
for(int j=0;j<2;j++){
cin>>n_arr[i][j];
}
}
//找窗口
int tmp[5];
for(int i=0;i<n;i++){
int z=m-1;
for(;z>=0;z--){
if(m_arr[z][0]<=n_arr[i][0]&&n_arr[i][0]<=m_arr[z][2] && m_arr[z][1]<=n_arr[i][1]&&n_arr[i][1]<=m_arr[z][3]){
cout<<m_arr[z][4]<<endl;
break;
}
}
if(z==-1){
cout<<"IGNORED"<<endl;
}else{
for(int p=0;p<5;p++){
tmp[p]=m_arr[z][p];
}
for(int k=z;k<m-1;k++){
for(int p=0;p<5;p++){
m_arr[k][p]=m_arr[k+1][p];
}
}
for(int p=0;p<5;p++){
m_arr[m-1][p]=tmp[p];
}
}
// cout<<"当前窗口情况:" <<endl;
// for(int a=0;a<m;a++){
// for(int b=0;b<5;b++){
// cout<<m_arr[a][b]<<" ";
// }
// cout<<endl;
// }
//
}
return 0;
}
Python解题:
# 输入
n,m=map(int,input().split())
line=[]
for i in range(n): #第5列存编号
line.insert(0,list(map(int,input().split()))+[i+1])
coor=[]
for _ in range(m):
coor.append(list(map(int,input().split())))
# 点击窗口
for c in coor:
flag=0
for i in range(n):
if line[i][0]<=c[0]<=line[i][2] and line[i][1]<=c[1]<=line[i][3]:
print(line[i][4])
top=[]
top=line.pop(i)
line.insert(0,top)
flag=1
break
if flag==0:
print("IGNORED")