题目在这里:P1003 [NOIP2011 提高组] 铺地毯 - 洛谷 | 计算机科学教育新生态 https://www.luogu.com.cn/problem/P1003
我想的是正着遍历逆序找 找到就输出
#include<bits/stdc++.h>
using namespace std;
int a[10000],b[100000],c[100000],d[100000],s[100000];
int main(){
int n;
int x,y;
int i;
int flag=0;
cin>>n;
for(i=0;i<n;i++){
cin>>a[i]>>b[i]>>c[i]>>d[i];
s[i]=i;
}
cin>>x>>y;
for(i=n-1;i>=0;i--){
if(x>=a[i]&&x<=a[i]+c[i]&&y>=b[i]&&y<=b[i]+d[i])
{
flag=1;
cout<<s[i];
break;
}
}
if(flag==0){
cout<<"-1";
}
return 0;
}
谢谢大家!
把s[i]=i; 改成s[i]=i+1; 你的for是从0开始的
为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有 n 张地毯,编号从 1到 n。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。
#include<bits/stdc++.h>
using namespace std;
int a[10000],b[100000],c[100000],d[100000],s[100000];
int main(){
int n;
int x,y;
int i;
int flag=0;
cin>>n;
for(i=0;i<n;i++){
cin>>a[i]>>b[i]>>c[i]>>d[i];
s[i]=i+1;
}
cin>>x>>y;
for(i=n-1;i>=0;i--){
if(x>=a[i]&&x<=a[i]+c[i]&&y>=b[i]&&y<=b[i]+d[i])
{
flag=1;
cout<<s[i];
break;
}
}
if(flag==0){
cout<<"-1";
}
return 0;
}