数列

题目大意:有一个长度为𝑛的数列,数列中每个数都是[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

第三题我真傻逼,没看出来或者说没看懂题面

我的排名在进步,我要继续努力,一天一个专题,一天五道题,冲鸭!