做题记录 25.8.18

\(\textcolor{blue}\odot\) CF1572B Xor of 3

显然有解的必要条件为异或和等于 \(0\)(一次操作不改变序列异或和)

\(n\) 为奇数时,先操作 \(n-2,n-4,\cdots,1\),这样 \(a_1=0\)\(\forall i>0,a_{2i}=a_{2i+1}\),然后操作 \(1,3,\cdots,n-2\),即可清空

\(n\) 为偶数时,找到一个异或和为 \(0\) 且长度为奇数的前缀,对前后两部分分别进行 \(n\) 为奇数时的操作即可,若无法找到,则序列为 \(1\;\;((0\;0)/(1\;1))^{\frac n2-1}\;1\),可证无解

时间复杂度 \(O(\sum n)\)

代码

参考

[2025“钉耙编程”中国大学生算法设计暑期联赛(10) 1007] Message Spreading

\(\text{ODT}\) 维护一下环上极长 \(0\) 段的长度集合,显然修改次数为 \(O(n+q)\)

显然操作二放在操作一之后最优,设操作二数量为 \(b\),则操作一数量为 \(\sum_{l\in S}\lfloor\frac l{2b+1}\rfloor\),其中 \(S\)\(0\) 段长度的可重集

特判一下全 \(0\) 的情况,对于每个 \(b\) 保存 \(rs_b=b+\sum_{l\in S}\lfloor\frac l{2b+1}\rfloor\),修改 \(S\) 时暴力修改 \(rs\)

显然 \(b>2\sqrt n\) 时一定不优,因此单次修改为 \(O(\sqrt n)\)

总时间复杂度 \(O(\sum (n+q)\sqrt n)\)

代码

[2025“钉耙编程”中国大学生算法设计暑期联赛(10) 1002] Multiple and Factor

倍数加对因数和、因数加对因数和、因数加对倍数和的贡献都容易 \(O(d(n))\) 维护,考虑如何维护倍数加对倍数和的贡献

一次 \(y\) 的倍数加 \(k\)\(x\) 的倍数和的贡献为 \(k\left\lfloor\frac n{\text{lcm}(x,y)}\right\rfloor\)

\(S=\sqrt n\),当 \(x,y\) 都大于 \(S\) 时暴力倍数加倍数求和即可做到 \(O\left(\frac nS\right)\)

\(x>S\) 时,暴力枚举 \(y\) 计算其贡献

\(y>S\) 时,暴力枚举 \(x\) 计算对 \(x\) 的贡献

时间复杂度 \(O(S\cdot L(S,n))\),其中 \(L(a,b)\) 表示计算 \(x\le a,y\le b\)\(\text{lcm}(x,y)\) 的复杂度,等于求 \(\gcd(x,y)\) 的复杂度,而 \(\gcd(x,y)=\gcd(y,x\bmod y)\),此时 \(a,b\) 都不超过 \(S\),可以预处理

总时间复杂度 \(O(qd(n)+q(S+\frac nS))\),取 \(S=\sqrt n\) 则时间复杂度为 \(O(q(d(n)+\sqrt n))\)

代码

posted @ 2025-08-19 10:31  Hstry  阅读(4)  评论(0)    收藏  举报