40px!

P1003 [NOIP2011 提高组] 铺地毯

[测试点](https://www.luogu.com.cn/record/129135156)
by laozhang_123 @ 2023-10-28 18:35:19


应该是数组开的不够大,看数据范围
by STG__ @ 2023-10-29 18:04:21


我也没过。。。40
by STG__ @ 2023-10-29 18:05:06


不是数组大不大的问题,你这个程序和我最初想的一样,但程序存在两个问题: 1.运行超时; 2.内存超额; 可以参考我的程序:``` #include<cstdio> using namespace std; int n,x,y,a[10001],b[10001],g[10001],k[10001],p=-1; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d%d%d",&a[i],&b[i],&g[i],&k[i]);//输入 } scanf("%d%d",&x,&y); for(int i=n;i>=1;i--)//从最上面的开始判断 { if(x>=a[i]&&y>=b[i]&&x<=a[i]+g[i]&&y<=b[i]+k[i])//如果点在这个地毯的范围之内 { p=i;//那么最终的答案是第xx个地毯 break;//退出,不要继续往下判断 } } printf("%d",p);//输出 return 0; } ```
by blue7628 @ 2023-11-03 23:16:20


``` #include<cstdio> using namespace std; int n,x,y,a[10001],b[10001],g[10001],k[10001],p=-1; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d%d%d",&a[i],&b[i],&g[i],&k[i]);//输入 } scanf("%d%d",&x,&y); for(int i=n;i>=1;i--)//从最上面的开始判断 { if(x>=a[i]&&y>=b[i]&&x<=a[i]+g[i]&&y<=b[i]+k[i])//如果点在这个地毯的范围之内 { p=i;//那么最终的答案是第xx个地毯 break;//退出,不要继续往下判断 } } printf("%d",p);//输出 return 0; } ``` 刚才那个看不太清
by blue7628 @ 2023-11-03 23:18:19


|