一些题(五)

[CF1474F] 1 2 3 4 ...

记进行完第 \(i\) 个操作后末尾的数为 \(a_i\),那么 LIS 的长度为 \(\max_{i<j}\{a_j-a_i\}\),计数时可以对每个取到最大值的区间 \([a_i,a_j]\) 分别考虑然后求和。记 \(f_{x,i}\) 表示 LIS 中的数 \(x\) 在第 \(i\) 次操作的区间中的方案数,那么转移可以写成矩阵的形式,并且对于每两个大小相邻的 \(a\) 之间的 \(x\) ,转移矩阵都相同,可以快速幂。

[CF1428G2] Lucky Numbers (Hard Version)

可以调整证明存在一种最优方案使得拆分出来的数中只有至多一个数不由 \(0,3,6,9\) 组成。于是初始化答案数组 \(f_x\)\(x\) 的权值,然后对于 \(i\in [0,5]\),加入 \(3(k-1)\) 个重量为 \(3\times 10^i\),权值为 \(F_i\) 的物品做背包,可以用二进制分组优化。

https://codeforces.com/contest/1428/submission/137503246

[CF1225G] To Make 1

可行当且仅当存在非负整数序列 \(b\) 使得 \(\sum a_ik^{-b_i}=1\),左推右显然,右推左可以考虑每次选择两个最大的 \(b\) 对应的位置合并然后归纳(注意到任何时候有 \(k\nmid a_i\),所以这两个 \(b\) 一定相等)。于是可以状压 dp 并用 bitset 优化做到 \(O((n2^n\sum a_i)/w)\),还原方案时用上述方法合并即可。

[CF1033F] Boolean Computer

FWT,每一位做对应位运算的变换即可。

[CF1012E] Cycle sort

对于一个排列,若它非自环的环数为 \(a\),它非不动点数量为 \(b\)。那么若 \(a\leq 2\),它可以用 \(a\) 个总长为 \(b\) 的轮换复合而成;否则可以用两个总长为 \(a+b\) 的轮换复合:第一个把所有环顺序排开,第二个调整每个环开头的顺序。

接下来考虑 \(s\) 的限制,若 \(s\leq b\) 那么显然无解,否则可以选出 \(x\) 个环单独做,剩下的一起做,这样需要 \(x+\min\{a-x,2\}\) 个总长为 \(a+b-x\) 的环。于是取 \(x=\max\{0,a+b-s\}\) 达到最优,需要 \(\max\{0,a+b-s\}+\min\{2,s-b\}\) 个环。

那么对于给定的数组,需要找到一个能将它排序的置换使得它非自环的环数尽可能少,这可以建出图后跑欧拉回路。

[CF1030G] Linear Congruential Generator

容易发现当 \(a=0\)\(f\) 的周期为 \(1\) 但会多出一个首项,当 \(a=1\) 时周期为 \(p\)\(a>1\) 时为 \(p-1\)。考虑最大化 lcm,可以依次降序考虑每个 \(p\),若 \(p\) 没被当前 lcm 包含就选 \(p\),否则选 \(p-1\)。最后看一下是否存在一项对 lcm 无贡献,若有则可以将它的 \(a\) 设为 \(0\) 并使答案 \(+1\)

[AGC006F] Blackout

先试图把图三染色,使得第 \(i\) 种颜色只向第 \(i+1\) (循环)中颜色连边。手玩一下发现:如果不存在染色方案,那么图一定会被补成一个完全图;如果只染出两种及以下颜色,那么图不变;否则图会被补全所有颜色 \(i\) 到颜色 \(i+1\) 的边。

https://atcoder.jp/contests/agc006/submissions/25126399

[CF802O] April Fools' Problem (hard)

容易建出费用流模型,所以问题关于 \(k\) 有凸性,那么可以 wqs 二分之后去掉 \(k\) 的限制。可以考虑反悔贪心,先假设所有 \(a\) 都被选,然后倒着考虑每一个 \(i\) 并维护一个小根堆,每次将 \(-a_i\)\(b_i\) 加入堆中然后取出堆顶元素表示用 \(b\) 匹配当前的 \(a\),或者反悔一个之前的 \(a\)

http://codeforces.com/contest/802/submission/137971347

[AGC056D] Subset Sum Game

这种题的套路大概是 Alice 先选定一种匹配并取走一对匹配中的一个元素,然后 Bob 可以在剩下的匹配中每组取走一个,如果无论如何留给 Alice 的元素都能满足条件那么 Alice 赢,否则若不存在这种匹配那么 Bob 赢。于是可以枚举 Alice 一开始选的那个数和它匹配的数,剩下的肯定大小相邻的匹配最优。排好序后用前后缀和判一判就好了。

https://atcoder.jp/contests/agc056/submissions/27705206

[AGC056B] Range Argmax

考虑将一个合法的 \(\{x\}\) 与满足其条件的 \({p^{-1}}^{\mathbf{rev}}\) 字典序最小的排列 \(p\) 双射,然后对这样的 \(p\) 计数。先考虑最大值的位置,假设在 \(i\),那么跨过 \(i\) 的区间的 \(x\) 都为 \(i\)。接着,对于 \((i,n]\) 就是一个没有其余限制的子问题。而对于 \([1,i)\),若其最大值的位置在 \(j\),那么必须有一个区间包含 \([i,j]\),否则可以将最大值填在 \(j\) 使字典序更小。这样就给了 \(j\) 一个下界,于是可以设 \(f_{l,r,i}\) 表示只考虑 \([l,r]\) 且区间最大值位置 \(\geq i\) 的方案数,然后同一区间按照 \(i\) 降序转移即可。

https://atcoder.jp/contests/agc056/submissions/27707408

[CF1375I] Cubic Lattice

将形如 \(q=s+x\mathrm{i}+y\mathrm{j}+z\mathrm{k}\) 的数称为四元数,其中 \(\mathrm{i}^2=\mathrm{j}^2=\mathrm{k}^2=\mathrm{ijk}=-1\) 为虚数单位。记 \(\overline{q}=s-x\mathrm{i}-y\mathrm{j}-z\mathrm{k}\)\(q\) 的共轭,\(|q|=\sqrt{q\overline{q}}=\sqrt{s^2+x^2+y^2+z^2}\)\(q\) 的模长。将 \(s,x,y,z\in \Z\) 的四元数称作 Lipschitz 四元数。将 \({1\over 2}q\)\(q\) 为 Lipschitz 四元数)称作 Hurwitz 四元数,它们构成了一个 Eucild 环,可以辗转相除求 gcd。对于三维向量 \(\vec{v}=(x,y,z)\),若 \(v=x\mathrm{i}+y\mathrm{j}+z\mathrm{k}\) ,那么它的旋转可以表示为 \(qv\overline{q}/|q|^2\)

对于本题,可以设 \((r_1,r_2,r_3)=rq(\mathrm{i},\mathrm{j},\mathrm{k})\overline{q}/|q|^2\),其中 \(q=s+x\mathrm{i}+y\mathrm{j}+z\mathrm{k}\) 为 Lipschitz 四元数并且不妨设 \(\gcd(s,x,y,z)=1\)。那么由于 \(r_i\) 为 Lipschitz 四元数,一通分析可得 \(r,4|q|^2\in \Z\)。再一通改造,可以把这个变换写成 \(v\mapsto qv\overline{q}\),其中 \(q\) 为 Hurwitz 四元数。那么就需要找到一个 Hurwitz 四元数 \(q\),使得对于给定的每个 \(a_i\),存在 Lipschitz 四元数 \(b_i\) 满足 \(a_i=qb_i\overline{q}\)

于是因为 \(r^2|\gcd(|a_i|^2)\),故可以从大到小枚举 \(r=|q|^2\),然后判断 \(q=\gcd(r,\gcd(a_i))\) 是否合法,即每个 \(b_i=\overline{q}a_iq/|q|^2\) 是否为 Lipschitz 四元数,就好了。

https://codeforces.com/contest/1375/submission/138254567

posted @ 2021-12-06 22:37  Y25t  阅读(219)  评论(0编辑  收藏  举报