数组法:
#include<iostream>
using namespace std;int main(){
int n,m,t1;
cin>>n>>m;
int arr[n][5],brr[m][2];
for(int i=0;i<n;i++){
arr[i][0]=i+1;
for(int j=1;j<5;j++)
cin>>arr[i][j];
}
for(int i=0;i<m;i++)
for(int j=0;j<2;j++)
cin>>brr[i][j];
bool flag=false;
for(int i=0;i<m;i++){
for(int j=n-1;j>=0;j--){
if(arr[j][1]<=brr[i][0]&&brr[i][0]<=arr[j][3]&&arr[j][2]<=brr[i][1]&&brr[i][1]<=arr[j][4]){
cout<<arr[j][0]<<endl;
flag=true;
if(j==n-1)break;
else
{
for(int k=0;k<5;k++){//利用循环来变换二维数组中的两行
for(int p=j;p<n-1;p++)
{
t1=arr[p][k];
arr[p][k]=arr[p+1][k];
arr[p+1][k]=t1;
// t1=arr[n-1][k];
// arr[n-1][k]=arr[j][k];
// arr[j][k]=t1;
}
}
break;//终止内循环
}
}
else flag=false;//这句话不加不行,因为flag是变量, 后期会在紧接着一次的基础上更新为true
}
//输出结果展示
/*
for(int i=0;i<n;i++){
for(int j=1;j<5;j++)
cout<<arr[i][j]<<" ";
cout<<"******"<<endl;
}
*/
if(!flag) cout<<"IGNORED"<<endl;
}
}
结构体法:
#include<bits/stdc++.h>
using namespace std;
const int N=10;
struct W{
int id;
int x1,y1,x2,y2;
}windows[N];
struct P{
int x,y;
} p[N];
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
{
windows[i].id=i+1;
cin>>windows[i].x1>>windows[i].y1>>windows[i].x2>>windows[i].y2;
}
for (int i=0;i<m;i++) cin>>p[i].x>>p[i].y;
for(int j=0;j<m;j++)
{
bool flag=false;
for(int i=n-1;i>=0;i--)
{
if(p[j].x>=windows[i].x1&&p[j].x<=windows[i].x2&&p[j].y>=windows[i].y1&&p[j].y<=windows[i].y2)
{
flag=true;
cout<<windows[i].id<<endl;
if(i==(n-1)) break;
else
{
for(int k=i;k<n-1;k++)
{
struct W temp;
temp=windows[k];
windows[k]=windows[k+1];
windows[k+1]=temp;
}
break;
}
}
}
if(!flag) cout<<"IGNORED"<<endl;
}
return 0;
}