这个样例也过不了怎么办?

P1003 [NOIP2011 提高组] 铺地毯

你外面`const int n`,`main`函数里面有定义了`n`我觉得有问题
by ZackofZHOU @ 2023-12-19 21:50:43


这不会CE吗?
by ZackofZHOU @ 2023-12-19 21:51:14


@[ZackofZHOU](/user/948216) 改了后还是过不了怎么办
by simple1first @ 2023-12-25 22:02:29


@[simple1first](/user/1124986) 那我也不知道了
by ZackofZHOU @ 2023-12-26 21:24:13


@[simple1first](/user/1124986) 问题在这里 下面是有问题的原代码 ``` for(int i=0;i<n;i++){ cin >> a >> b >> g >> k; dt[i] = {a ,b ,a+g-1 ,b+k-1}; } for(int i=n;i>=1;i--){ if(dt[i].x1<=x && x<=dt[i].x2 && dt[i].y1<=y && y<=dt[i].y2){ ans = i; break; } } ``` 对于输入是从下标为0的位置 到下标为n-1的位置 而遍历时却从下标为n的位置开始,导致最后一个位置的地毯没有被考虑到 修改后代码在这 已经AC 请放心食用 ``` #include<bits/stdc++.h> using namespace std; const int maxn = 2e5+3; struct dt{ int x1,y1,x2,y2; }dt[maxn]; int main(){ int n,a,b,g,k,x,y,ans; cin >> n; for(int i=1;i<=n;i++){ cin >> a >> b >> g >> k; dt[i] = {a ,b ,a+g-1 ,b+k-1}; } cin >> x >>y; for(int i=n;i>=1;i--){ if(dt[i].x1<=x && x<=dt[i].x2 && dt[i].y1<=y && y<=dt[i].y2){ ans = i; break; } } if(ans!=0) cout << ans; else cout << "-1"; return 0; } ```
by taoyize @ 2023-12-26 21:41:47


@[taoyize](/user/1097100) 谢谢大佬
by simple1first @ 2023-12-28 21:18:01


|