做题记录 26.3.24

\(\textcolor{purple}\odot\) AT_agc003_d [AGC003D] Anticube

消去所有立方因子后,可能冲突的数字两两配对,每一对中选择数量较多的一组即可

容易做到 \(O(\sqrt V+n\pi(\sqrt V))\)

代码

\(\textcolor{purple}\odot\) AT_agc006_f [AGC006F] Blackout

转化为给定 \(1\sim n\) 个点,若 \(x\to y\)\(y\to z\)\(z\to y\),求最终边数

显然每个弱连通块之间独立,因此分开考虑

对图三染色

若一个弱连通块无法三染色则贡献为 \(n^2\),其中 \(n\) 为点数

若三染色后三种颜色不全,则贡献为原本的边数

若同时有三种颜色,设三种颜色的点数分别为 \(a,b,c\),则贡献为 \(a\times b+b\times c+c\times a\)

容易做到 \(O(n+m)\)

代码

参考

\(\textcolor{purple}\odot\) AT_agc028_d [AGC028D] Chords

\((l,r)\) 表示将环拆分为 \([l,r)\)\([r,n]\cup[1,l)\) 两部分

\(2x\) 个空位连 \(x\) 条弦的方案显然为 \(\frac{(2x)!}{2^x x!}\),容易 \(O(1)\) 计算,记为 \(F(x)\)

对于任意一种固定方案,连通块数量为 \(1+\sum_{1\le l<r\le 2n} C(l,r)\),其中 \(C(l,r)\) 表示在这种方案中 \([l,r)\) 是否为一个连通块

\(1\) 的部分总贡献显然为 \(F(n-k)\),枚举 \((l,r)\),令 \(f(l,r)\) 表示只考虑 \([l,r)\) 内部的情况下 \([l,r)\) 为一个连通块的方案数,令 \(c_2\) 表示 \([l,r)\) 之外的空位数量的一半(若为奇数显然无贡献),则 \([l,r)\) 的贡献为 \(f(l,r)\times F(c_2)\),显然 \(c_2\) 是容易处理的,问题转化为计算 \(f\)

对于 \(f(l,r)\),对于 \([l,r)\) 中空位数量为奇数或存在 \([l,r)\) 内到 \([l,r)\) 外的已知边的情况,显然无解,接下来考虑一般情况

容斥,令 \(c(l,r)\) 表示 \([l,r)\) 中空位数量的一半(若为奇数则跳过对应项),则

\[f(l,r)=F(c(l,r))-\sum_{l\le k<r} f(l,k) F(c(k,r)) \]

容易做到 \(O(n^3)\)

代码

\(\textcolor{purple}\odot\) AT_agc010_d [AGC010D] Decrementing

以下假定 \(\gcd a_i=1\)

定理 \(1\):若 \(\sum(a_i-1)\equiv 1\pmod 2\) 则先手必胜

证明:

  • 存在 \(a_i=1\) 时显然
  • 不存在 \(a_i=1\) 时,若满足条件,则表示此时有奇数个偶数
  • 由于 \(\gcd a\ne 1\),从而还有至少一个奇数
  • 此时的先手选择任意一个偶数减一,操作后 \(\gcd a_i\) 仍然为奇数,除以 \(\gcd\) 后为偶数个偶数和至少两个奇数
  • 后手选择一个建议,得到奇数个偶数和至少一个奇数,除以 \(\gcd\) 后仍然为奇数个偶数和至少一个奇数
  • 由此重复可以达到存在 \(a_i=1\) 的状态,从而先手必胜

接下来考虑不满足此要求的情况,此时先手会尽量让下一步避免此情况

若存在 \(>1\) 个奇数,则当前先手操作后必然还有至少一个奇数,由于不满足前述要求,必然有偶数个偶数,到下一步必然为先手必胜局面,从而当前先手必败

否则若存在 \(1\),同样先手必败

否则恰好有一个奇数,选择之减一,递归到下一步

显然每次递归所有数字至少除以 \(2\),从而时间复杂度 \(O(n\log^2 V)\)

代码

参考

NFLS #32250. 平分子集

\(a_{1\sim 30}\) 依次取 \(2^{0\sim 29}\)\(a_{31}\)\(2^{29}+1\),剩余的 \(a\) 取接近 \(10^9\) 的值即可,构造子集时贪心地从后往前取即可

代码

NFLS #35447. 和最大的子数组

显然题目中的错误方法计算的是最大连续非负子段和

要使差值最大,显然存在一种最优解使得所有新插入的数都是 \(-1\)\(k\)

由此可以 \(dp\),令 \(f_{i,j,k}\) 表示考虑 \(1\sim i\)(加入新增位置后的下标),目前极长非负后缀为 \([j,i]\)(若不存在则 \(j=i+1\)),最大后缀和为 \(k\) 的情况下,历史最大连续非负子段和的最小值

容易做到 \(O(\sum n^3m)\),需要注意常数

代码

参考

posted @ 2026-03-25 06:52  Hstry  阅读(2)  评论(0)    收藏  举报