蒟蒻第一篇题解(与其说是题解,不如说是一些心得体会)
算法:模拟,枚举
阅读题目过后,第一眼觉得是二维数组模拟整个铺地毯的过程,but经验告诉我肯定会爆内存,数据范围证明确实如此。
so,我的思路是这样的:
首先用一个结构体数组存储每一张地毯的相关信息;
然后循环判断这一张地毯是否能够覆盖所求点的坐标(x,y);
最后输出结果;
第二步可以采取逆序判断提高效率
可以总结一下对于这种题目的一般思路:
1,如何输入(主要考虑如何存储数据=>是否使用数组存储数据,数据范围如何)
2,正序判断/逆序判断/模拟整个过程?
最后附上AC代码
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<stdbool.h>
#define map_size 100010
struct Node
{
unsigned long a,b,g,k;
};
struct Node map[map_size+1];
int main()
{
unsigned long n;
scanf("%lu",&n);
for(unsigned long i=1;i<=n;i++)
{
scanf("%lu %lu %lu %lu",&map[i].a,&map[i].b,&map[i].g,&map[i].k);
}
unsigned long x,y;
long long int index=-1;
scanf("%lu %lu",&x,&y);
for(unsigned long i=1;i<=n;i++)
{
if(map[i].a<=x&&map[i].b<=y)
{
if(map[i].a+map[i].g>=x&&map[i].b+map[i].k>=y)
{
index=i;
}
}
else continue;
}
printf("%lld",index);
return 0;
}