Codeforces 1299 题解

鸽了一周的题解……我颓炸了。

A

考虑一下 \(f(x,y)\) 的意义,就是 \(x\) 具有且 \(y\) 不具有的位,那么 \(f(f(x,y),z)=f(x,y\ \text{or}\ z)\). 也就是只有重排后第一个位置是多少队最终的值有影响。
于是可以维护前后缀 \(\text{or}\) 然后枚举第一个即可。
时间复杂度 \(O(n)\).
代码: 80183835

B

答案是 YES 当且仅当 \(n\) 为偶数且对边分别平行且相等。
时间复杂度 \(O(n)\).
代码: 80185064

C

单调栈维护权值相等的区间即可,每次新加一个元素,如果能让最后一段变小就变小并合并。
代码: 80185496

D

首先考虑“不存在包含 \(1\) 号点且大小超过 \(3\) 的简单环”这个限制,这就意味着在删掉 \(1\) 之后的每个连通块里,和 \(1\) 相连的边数一定是 \(1\)\(2\)
如果是 \(1\),那么该连通块内的异或值域可以直接用生成树+线性基求出,在这里有两种选择(删边或者不删边),对应的集合分别是 \(\emptyset\) 和异或值域;如果是 \(2\),那么有 \(4\) 种选择,一种是 \(\emptyset\)\(2\) 种是异或值域,还有一种是算上和 \(1\) 相连的三元环之后的异或值域。
于是问题转化为了:有若干个组,每个组包含不超过 \(4\) 个集合。从每个组中选出一个集合,使得所有选出的集合的并集里的数线性无关。
\(5\) 位的本质不同的线性基只有 \(374\) 种。所以可以把最简形式的线性基当作状态进行 DP. 预处理所有两个状态的和。
时间复杂度 \(O(nS+S^2W),W=5,S=374\).
代码: 80217223

E

(怎么看都像手动翻译官方题解.jpg)
(1) 首先可以观察到 \(\sum^n_{i=1}i-k\equiv 1\ (\mod n-1)\) 成立当且仅当 \(k=1\)\(k=n\) 时成立。由于 \(p_1,p_2,...,p_n\)\((n+1-p_1),(n+1-p_2),...,(n+1-p_n)\) 不可区分,因此可以随便钦定一个作为 \(1\),另一个作为 \(n\).
花费 \(n\) 次询问。
(2) 知道 \(1\)\(n\) 之后,我们可以求出每个位置的奇偶性,只需要将该位置和 \(1\) 放在一起问一下即可。
花费 \(n\) 次询问。
(3) 在这之后,我们发现问题变成了一个规模为 \((n-2)\) 的子问题,可以用相同的办法处理。每次确定 \(k\)\((n+1-k)\),通过奇偶性区分这两个。
于是我们就得到了一种暴力做法,总共询问次数是 \(\sum^{\frac{n}{2}}_{i=1}2i\) 的,但是并不够。
在这里,我们用这个方法问出 \(1,2,3,4,n-3,n-2,n-1,n\),然后再进行后续的处理。
至此前三步花费 \(5n\) 次询问(忽略常数)。
(4) 考虑使用中国剩余定理,依次求出每个元素模 \(3,5,7,8\) 意义下的值。
对于 \(p=3,5,7\),分别可以用 \(1,2,3,4,n-3,n-2,n-1,n\) 中的一个 \((p-1)\) 元子集凑出 \(\mod p\) 意义下至少 \((p-1)\) 种和,于是,花费的次数是 \(\sum^p_{i=2}\frac{i}{p}n\).
对于 \(p=8\),可以先确定每个位置 \(\mod 4\) 的值,再确定 \(\mod 8\) 的值,两次分别都只需要从两种选择中排除一种,也是用 \(1,2,3,4,n-3,n-2,n-1,n\) 凑出和,花费的次数是 \(2n\).
总询问次数约 \(15.324n\).
代码: 80272370

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读