1 条题解
-
11
在阅读题解之前,先给各位 dalao 安利一下我的个人博客呗~感兴趣的 dalao 也可以在我的博客上查看,看完了别忘了点个赞哟~
好了,说正事:
说实话,第一眼看到这道题,觉得天呐,好复杂,但是如果你真正读懂了这道题,会觉得题目根本就是在坑你,哪有那么
复杂。先说思路,其实这道题的数据非常水,仔细阅读会发现, 的最大值竟然只有小小的一万,没错,这不就是枚举吗?
我们先输入各组数据,再依次枚举,只用看看这一个点是否有被地毯覆盖就行了。
但是,
注意!!!
一定要从大到小进行枚举,因为题目是让输出盖在此点上的最大的地毯编号。
然后就……
没什么好讲的了。又到了最欢乐的代码时间。
#include<bits/stdc++.h> using namespace std; const int max_n=10005; long long int n,j[max_n],k[max_n],a[max_n],b[max_n],x,y; void z(){ //freopen("carpet.in","r",stdin); //比赛的时候记得加这两句 //freopen("carpet.out","w",stdout); scanf("%lld",&n); for(int i=1;i<=n;i++)scanf("%lld%lld%lld%lld",&j[i],&k[i],&a[i],&b[i]); scanf("%lld%lld",&x,&y); for(int i=n;i>=1;i--){ //从大到小依次枚举每块地毯 if(x<=j[i]+a[i]&&x>=j[i]&&y<=k[i]+b[i]&&y>=k[i]){//判断目标点是否被覆盖 printf("%d",i); //输出编号 return; //返回主函数 } } //跳出循环则代表目标点没有被覆盖 printf("-1"); return; } int main(){ z(); return 0; //记得加这句,不然比赛的时候会错!!! }
该代码时间复杂度为 。
代码已 AC。
请放心食用。相见就是缘分呀~
如果你看到了,不妨留下个赞再走呗,感谢观看~
886~
信息
- ID
- 678
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 10
- 标签
- 递交数
- 7
- 已通过
- 4
- 上传者