CF902A Visiting a Friend
CF902A Visiting a Friend
这道题其实还是一个模拟 (建议下降难度)
题目大意: 输入一个 ,表示 组数据,在输入 ,表示该序列长度。 然后起始点在 ,接着输入 次的 和 表示在 和 这个区间内的数值是可行的。最后问从 开始,可不可以到达终点。
这个题目,仔细审读一下便可以发现:如果可以通过,那么 和 就必须覆盖到这一个区间内的每一个点上。所以我们只需要先对每一个 和 之间的值变成 true,注意要判断,就是当前的点是在被标记过的范围内,才可以进行更新。最后在寻找一遍,如果有一个点是 false 的话,输出 NO 并且 exit(0)即可。最后如果都是 true 的话,输出 YES 即可
所以代码便是:
#include<bits/stdc++.h>
using namespace std;
const int N =1e6+10;
bool a[N];
int main()
{
int n,m;
cin>>n>>m;
memset(a,false,sizeof(a));// 初始化
a[0]=true;
for(int i=1;i<=n;i++)
{
int x,y;
cin>>x>>y;
if(a[x]) //在当前的点是可以在标记的范围内
{
for(int j=x;j<=y;j++)
a[j]=true;
}
}
for(int i=0;i<=m;i++)
{
if(a[i]==false) //当前的点没有被更新过
{
cout<<"NO"<<endl;
return 0;
}
}
cout<<"YES";
return 0;
}