这个地毯问题,只要把它转化为一个范围问题,就很简单了,设定数组来限制出每个矩形的x,y的范围,再从上往下比较就可以得出答案
我是想着弄个简单数据结构,限制出x,y的范围那,这个基本解决了,再用坐标来一个个比较就出来了;
#include <iostream> using namespace std; struct position { int x[2]; int y[2]; }; bool data(int m,int x1,int x2) { if(m>=x1&&m<=x2 ) return true; else return false; } int main() { int n,i,x,y; scanf("%d",&n); position a[n]; for(i=0;i<n;i++) { scanf("%d%d%d%d",&a[i].x[0],&a[i].y[0],&x,&y); a[i].x[1]=a[i].x[0]+x; a[i].y[1]=a[i].y[0]+y; } scanf("%d%d",&x,&y); int t=-1; for(i=n-1;i>=0;i--) { if(data(x,a[i].x[0],a[i].x[1])&&data(y,a[i].y[0],a[i].y[1])) { t=i; break; } } if(t!=-1) { t=t+1; printf("%d",t); } else printf("-1"); return 0; }