题目大意:有一个长度为𝑛的数列,数列中每个数都是[0, 𝑝 −
1]之间的整数。小A不知道数列中每个数的值,所以向小B做了𝑚次询问。
每次小A会向小B询问一个区间[𝑙,
𝑟]中所有数的和对𝑝取模的结果。问完所有问题后,小A发现小B的回答中似乎存在矛盾。现在小A想找到最大的𝑋,满足小B的前𝑋次回答中不存在矛盾(𝑋有可能等于𝑚)。
通过这篇题解学会了
具体请移步:How Many Answers Are Wrong的题解
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #include <bits/stdc++.h> using namespace std;
const int N = 1e6 + 66;
int n, m, mod; int a[N], fa[N], sum[N];
inline int yhm_find(int x) { if (x == fa[x]) return x; int t = yhm_find(fa[x]); sum[x] = (sum[x] + sum[fa[x]]) % mod; return fa[x] = t; }
signed main() { int i, l, r, k, x, y; n = read(), m = read(), mod = read();
for (i = 1; i <= n; ++ i) fa[i] = i;
for (i = 1; i <= m; ++ i) { l = read(), r = read(), k = read(); x = yhm_find(l - 1), y = yhm_find(r); if (x != y) { fa[x] = y; sum[x] = (sum[r] - sum[l - 1] + k + mod) % mod; } else if ((sum[l - 1] - sum[r] + mod) % mod != k) break; }
put(i - 1); return 0; }
|
总结:今天考试第一题挂掉了,第三题的题面隐藏的信息没有挖掘出来
期望得分:80+30+60pts,实际得分:50+30+0pts
第三题我真傻逼,没看出来或者说没看懂题面
我的排名在进步,我要继续努力,一天一个专题,一天五道题,冲鸭!