CF1305
A
sb题
B
sb题
C
根据容斥原理,如果 \(n>m\),则至少存在两个数满足 \(a_i=a_j\pmod m\),所以输出 \(0\) 即可,否则暴力。
D
选两个叶子节点,然后查询,然后删除其中一个或者两个即可。
保证每次查询至少可以删除一个点,同时查询的上界为 \(\lfloor\frac{n}{2}\rfloor\)
E
如果 \(n\) 给定如何构造保证答案最大?
1 2 3 4...
否则如果大于了怎么办?
设到第 \(k'\) 位有和为 \(w\),那么 \(m-w\) 如何放入进去?
我们发现之前的答案增长是第 \(i\) 位增加 \(\lfloor\frac{i-1}{2}\rfloor\)
那么肯定有 \((m-1/2)>m-w\),那么把 \(m-w\) 变成两倍,然后从那个位置开始放即可。
F
发现答案的上界为 \(n\) 中的奇数个数。换而言之答案上界 \(\le n\)
另一边,由于答案的上界为 \(n\) 所以对于最后的答案,一定至少有 \(\frac{n}{2}\) 个数只被操作了 1 次或者以下。
否则操作次数 \(>n\)
于是随机一个数,这个数就有 \(\frac{1}{2}\) 的概率没被操作过/只被操作了 \(1\) 次。
于是随机 \(m\) 次然后对这 \(3\) 种情况分解质因数即可。需要注意的是 check 方式与因数无关只需要知道质因数即可。
复杂度 \(O(m\sqrt a_i+mw(a_i)\times n)\),正确率:\(1-\frac{1}{2^m}\),其中 \(w\) 为质因数。
\(m\) 取 \(60\) 才过题...
这道题好玩.jpeg
CF1305G [* hard]
给定 \(n\) 个数 \(a_i\),并生成图 \(G\)
对于 \((i,j)\),若 \(a_i~ \textrm{and}~ a_j=0\),那么连接 \(i\leftrightarrow j\)
现在每个点都要被加入集合 \(S\),有两种方式加入集合:
- 直接加入集合 \(S\),贡献为 \(0\)
- 对于 \(v\),选择这个与这个点有边的点 \(u\)(需保证 \(u\) 在集合内),然后将 \(v\) 加入集合,贡献为 \(a_u\)(即起点)
最大化贡献。
\(n\le 2\times 10^5,a_i\in [0,2\times 10^5]\)
Solution
神仙题...我完全没想到点子上。
考虑建一张图,对于 \((i,j)\) 若 \(a_i ~\mathbf{and}~a_j=0\) 就连边 \(i\to j\)
同时我们加入一个点权值为 \(0\)
然后我们让每条边的权值为 \(a_i+a_j\)
不难发现答案是边权和减去点权和。
于是从大到小枚举 \(a_i+a_j=w\),然后枚举 \(w\) 的子集 \(x\),连接 \(x\) 和 \(w\oplus w\) 即可。
复杂度 \(\mathcal O(3^{18}\times \alpha)\)
可以考虑 B 开头的生成树算法,每次在一个连通块选一个最大出边连出去,然后可以证明合并次数不超过 \(\log\) 次。
于是对每个元素保留最大出边即可,这个等价于满足为其取反子集的最大值,可以用 dp 算。
每轮都做一次这个 dp 即可,复杂度 \(\mathcal O(2^{18}\log(w) \alpha(w))\)
CF1305H []
不会。