P1003 [NOIP2011 提高组] 铺地毯
原题链接(这里不再赘述问题描述):P1003 [NOIP2011 提高组]
题目分析:
不用多想,开个2维数组必定MLE(爆内存)
这道题我看题解学会的“聪明的枚举+模拟”,先开4个数组存坐标,然后再倒着遍历、
因为本题的数据具有覆盖的特点所以这样会节约很多时间,水一波答案
主要是因为判断xy是否在矩形内部只用4个端点值就可以了,用不到那么大的数组去存数据
代码:
#include<iostream>
#include<cstdio>
using namespace std;
const int N = 10e5 + 10;
int a[N], b[N], g[N], k[N];
int x, y;
int main()
{
int n,i;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
scanf("%d%d%d%d", a + i, b + i, g + i, k + i);
}
scanf("%d%d", &x, &y);
for (i = n; i>0; i--)
{
if ((a[i] <= x && x <= a[i] + g[i]) && (b[i]<=y&&y<=b[i]+k[i]))
{
printf("%d", i);
break;
}
}
if (!i) printf("-1");
return 0;
}
文章讲述了如何解决一个编程竞赛中的问题——P1003题,通过避免使用可能造成内存限制错误(MLE)的二维数组,转而采用四个数组进行“聪明的枚举+模拟”方法,对数据进行倒序遍历,从而优化了时间复杂度,实现了在矩形覆盖特性下的高效判断。
319

被折叠的 条评论
为什么被折叠?



