赛时写了如下的代码:
vector games(m, vector<int>(t, -1));
for (int i = 0; i < n; i++) {
games[a[i].gid][a[i].r] = i;
}
for (int i = 0; i < t; i++) {
for (int j = 0; j < m; j++) {
int now = games[j][i];
if (now == -1) {
break;
}
...
}
}
这个 break 的意思就是如果这场比赛的第 i 名不存在,那直接开始从头开始找第 i + 1 名。显然是不对的,应改为 continue 才对。
20min A-G,然后H做了四十几分钟……瞪好久才发现问题,模拟题还是太难了(确信)。