结果错了 想知道怎么改

题目在这里: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;
}