题目链接:http://codeforces.com/problemset/problem/417/B
题目大意:每个提交者都有一个id标识,并且每次提交有两个信息:x - 之前发送的不同的解的个数,因此,所有相同的解决方案具有相同的x;k - 提交者id。给出一些提交信息,判断它是否符合时间顺序。
题目分析:如果数字是从0一路加上去的就是YES,如果出现的数字是已经出现过的也没关系,但是如果出现的数字是比之前记录的数字+1还大的,就NO了。
代码参考:
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 100009;
int cnt[N];
int main()
{
int n, m, c, d, k, i, x;
while(~scanf("%d", &n))
{
memset(cnt, -1, sizeof(cnt));//一开始赋值为0
bool f = true;//标记是否有非法情况出现
for(i=0; i<n; ++i)
{
scanf("%d%d", &x, &k);
if(cnt[k] == x - 1) cnt[k] = x;//如果是一路加上去的,ok
else if(cnt[k] >= x) continue;//如果之前出现过的也ok
else f = false;//但是如果都不是就no了
}
if(f == false) puts("NO");
else puts("YES");
}
return 0;
}