[NOIP2011]铺地毯
这是一道比较简单的noip真题,我们稍微转点弯,直接模拟做就是,我们先来看看题目描述:
题目链接:[NOIP2011]铺地毯
思路
我们可以发现直接暴力模拟是不行的,那么可以转换下思路,它既然是要求覆盖某点的最上一层的地毯编号,那么没有覆盖的我们可以不用求了。
怎么做呢:判断地毯范围是否覆盖那个点,若覆盖则记录,具体的我们直接看代码吧
我们来看看成功AC的代码吧:
#include<bits/stdc++.h> using namespace std; int n; struct Nd{ int a,b,g,k; }rug[100010]; int x,y; int ans=-1; int main(){ cin.tie(0); ios::sync_with_stdio(false); cin>>n; for(int i=1;i<=n;i++){ int a,b,g,k; cin>>a>>b>>g>>k; rug[i]={a,b,g,k};//先用结构体把地毯存下来,才方便后面的处理 } cin>>x>>y; int x1,x2,y1,y2; for(int i=n;i>=1;i--){//倒着循环会快点点 //地毯铺的范围 x1=rug[i].a, x2=x1+rug[i].g; y1=rug[i].b, y2=y1+rug[i].k; //如果答案在范围内,记录 if(x1<=x&&x2>=x&&y1<=y&&y2>=y){ans=i;break;} } cout<<ans; return 0; }