题解 P1003 【铺地毯】

· · 题解

用两个数组存每张地毯的左下角和右上角,再从后向前一张一张推,遇到要求的点在地毯内就输出并退出。(这样比顺着推会快一些)


#include <iostream>  
using namespace std;  
int a[10001][2],b[10001][2],x,y,i,n,m;  
int main()  
{  
scanf ("%d",&i);   
for (int j=1;j<=i;j++) {scanf("%d%d%d%d",&a[j][0],&a[j][1],&n,&m); b[j][0]=a[j][0]+n; b[j][1]=a[j][1]+m;}  
scanf ("%d%d",&x,&y);  
for (int j=i;j>=1;j--)  
if (x>=a[j][0]&&x<=b[j][0]&&y>=a[j][1]&&y<=b[j][1]) {printf("%d",j);  return 0;}  
cout <<-1;  return 0;  
}