题目大意:在比赛过程,每个选手可以提交若干次代码,现在有n次提交,每次提交有两个参数,x表示该选手提交的第x+1份不同代码(即前面提交的代码中有x种和当前份不同),k表示第k位选手提交的代码。问说这n次提交是否有误。
解题思路:开一个数组,标记每个选手提交了几份不同的代码,如果当前x > c[k]则说明有误,x = c[k],则c[k]要加1。
#include <cstdio>
#include <cstring>
const int N = 1e5+5;
int main () {
int n, x, k, c[N];
bool flag = true;
memset(c, 0, sizeof(c));
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d%d", &x, &k);
if (x < c[k])
continue;
else if (x == c[k])
c[k]++;
else
flag = false;
}
printf("%s\n", flag ? "YES" : "NO");
return 0;
}