Codeforces Round 325 (Div. 1) (CF585)
这场的洛谷难度评分属实令人迷惑。
A. Gennady the Dentist
模拟,略。
B. Phillip and Trains
爆搜,怎么搜都行。
C. Alice, Bob, Oranges and Apples
Description
一开始果篮里有 \(x\) 个橘子,\(y\) 个苹果。游戏开始前,Alice 从果篮中拿 \(1\) 个橘子,Bob 则拿 \(1\) 个苹果。
对于一个由字符 A
和 B
组成的序列,每个字符代表一次操作。A
操作表示 Alice 从果篮里拿与自己手里等量的水果送给 Bob(两种分别相等),B
操作则相反。
请构造一个字符串序列表示操作,使果篮在从左到右依次执行完所有操作后恰好被拿空。
\(x,y\le 10^{18}\)。
Solution
发现这个操作长得像辗转相除反过来?写了一发过了。
完结撒花
但是仔细想想发现你修改和求和的根本不是一个维度的东西,完全不能说明这样做为什么是对的,我们要证明这个做法的正确性。
设 \(a_0,a_1\) 分别为 Alice 的橙子、苹果数,Bob 同理。考虑构造状态矩阵 \(\begin{bmatrix}a_0 & b_0\\a_1 & b_1 \end{bmatrix}\),发现初始状态恰好为单位矩阵,即 \(I=\begin{bmatrix}1 & 0\\0 & 1 \end{bmatrix}\)。
接下来用矩乘来刻画操作:A
操作为矩阵 \(A=\begin{bmatrix}1 & 1\\0 & 1 \end{bmatrix}\),B
操作为矩阵 \(B=\begin{bmatrix}1 & 0\\1 & 1 \end{bmatrix}\)。
最后刻画答案,设 \(P\) 为当前矩阵,定义函数 \(f(P)=\dfrac{a_0+b_0}{a_1+b_1}\),则答案矩阵满足 \(f(ans)=\dfrac{x}{y}\)。
那么我们要构造一个矩乘序列,令 \(I\) 依次右乘若干个 \(A,B\),最后满足上述条件。当然因为 \(I\) 是单位矩阵,可以忽略不计。
考虑矩乘操作对原数组的影响,看起来不好求,但我们可以把操作序列倒过来:
设若干 \(A,B\) 的乘积为矩阵 \(P\),第一次操作是 \(A\)。那么我们把 \(P\) 拆成 \(AP'\),设 \(P'=\begin{bmatrix}a & b\\c& d \end{bmatrix}\)。
大力推式子:
令 \(a+b=n,c+d=m\)。那么有:
这次是真的更相减损了。
D. Lizard Era: Beginning
meet in the middle.
发现每行有 \(3\) 种状态,共 \(3^{25}\) 种,不能直接枚举。
考虑折半,搜出前 \(12\) 个的状态,再用后面一半的状态去匹配。对于三个数相等的条件看起来不好处理,我们考虑用差分数组来判断:前后两部分加起来差分数组为 \(0\),即前后两部分差分数组互为相反数。
搜的时候可以直接枚举三进制状压。
E. Present for Vitalik the Philatelist
容斥。
枚举 \(\gcd\) 的值为 \(d\),设它的倍数个数为 \(cnt\)。那么对应的方案数即为 \((n-cnt)*(2^{cnt}-1)\)。
不过这样算会重复,考虑容斥。
用常见的容斥系数去拟合,发现系数是莫比乌斯函数的相反数。
F. Digits of Number Pi
遇到数字+串串题,基本上是某自动机+数位 dp。这个题 ACAM 和 SAM 均可以。
具体地,在 dp 状态中记录当前在自动机上的位置以及出现过的最大长度。转移这里不写了。
本文来自博客园,作者:樱雪喵,转载请注明原文链接:https://www.cnblogs.com/ying-xue/p/cf585.html