Examples

2023-4-12 #47 玫瑰勋章与尖刀 挣开束缚的舞蹈

——纪远《Break Out》

(不知道应该写哪位作者.jpg)

【乐正绫原创曲】Break Out【2023官方生贺曲】

前面几篇都没更完,之后再发。

最近这段时间都在补 whk,所以更新速度会慢一点。

277 CF1310F Bad Cryptography

还不太会 nim 积,我只能将其当成一个黑盒用!

本题的有限域值域 \([1,2^{64}-1]\),大小 \(S=2^64-1=3\times 5\times 17\times 257\times 641\times 65537\times 6700417\),一个直观的想法就是对每个素因子做 BSGS 并合并。

先考虑刻画合并的过程,我们依次考虑每个素因子 \(p\),对答案 \(x\) 作带余除法得 \(x=sp+t\),那么:

\[a^{sp+t}=b\Rightarrow (a^p)^s=b\times a^{-t} \]

逆元是好求的,因为 \(a^{-t}=a^{S-t}\)(这依赖于 nim 积数域下的费马小定理,证明类似费马小定理的证明,先证对于任意 \(a\),所有 \(x\)\(x\otimes a\) 互不相同,于是 \(\prod x=\prod(x\otimes a)\))。

依次考虑完每个素因子后 \(a\) 一定会变成 \(1\),于是只需判断 \(b\) 是否为 \(1\),如果是我们取解 \(x=0\) 然后往回一个个推,否则无解。

注意上面的问题如果直接 BSGS 复杂度仍然很劣,但是显然有:

\[a^{sp+t}=b\Rightarrow (a^{\frac Sp})^t=b^{\frac Sp} \]

只要有解一定存在这样的 \(t\),而现在的域大小为 \(p\),可以直接 \(O(\sqrt p)\) BSGS 解决。

278 CF1815E Bosco and Particle

不会。

我们单独考虑一个障碍两面对应的碰撞次数,注意到其比值一定等于 \(n=1\) 时这两面对应的碰撞次数的比值。

\(n=1\) 时求出碰撞次数是简单的,只需将字符串的周期去掉后模拟。

我们设 \(f_i\) 表示第 \(i\) 个间隙的经过次数,那么有 \(\frac{f_i}{f_{i-1}}=\frac{a_i}{b_i}\)\(a,b\) 是我们求得的碰撞次数。

将所有数表示成 \(f_0\) 倍数的形式,我们事实上只需找到一个最小的 \(f_0\) 使得所有数为整数,随便做做就好了。

279 CF1815F OH NO1 (-2-3-4)

考过还不会做????????

做法一:(考过的原题做法)

按照编号顺序依次加入每个点,每次加完点后我们只保证其与之前加入的点满足限制。

假设这个点在 \(A\) 个三角形中作为编号最小的点,\(B\) 个三角形中作为编号中间的点,\(C\) 个三角形中作为编号最大的点,那么限制一共有 \(B+2C\) 条。根据鸽巢原理,我们希望能调整边的取值使得当前点不少于 \(B+2C+1\) 种取值。

人脑 dfs 一下,对于每个三角形我们能组合出以下六种取值:

\[(5,4,3),(5,4,5),(5,4,7),(5,5,4),(5,5,6),(5,5,8) \]

那么一定可以表示出 \([p,p+4C]\) 中所有与 \(p\) 奇偶性相同的权值以及 \([p+4C+1,p+4C+B]\) 的所有权值,恰好 \(B+2C+1\) 种。

做法二:(更优秀,只需用到 \([1,3]\) 内的权值,orz JohnVictor)

考虑一个新的问题:每条边都可以选择其中一个端点加一,能否构造出合法解。

每次取出图中最小权值点,将其相连的所有边都定向为另一个点,并删除掉这个点与这些边,正确性显然。

上述的构造在一个三角形上对应 \((1,1,1)\)\((0,1,2)\),我们能构造出 \((4,4,4),(3,4,5)\) 与之对应,只需在最开始给每个三角形整体加 \(3\)

280 P1587 [NOI2016] 循环之美

一个很好猜的结论是纯循环当且仅当最简形式分母与 \(k\) 互素。

直接列出答案式:

\[\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=1][\gcd(j,k)=1]\\=\sum_{d=1}^n\mu(d)\sum_{d\mid i,j}[\gcd(j,k)=1]\\=\sum_{d=1}^n\mu(d)\lfloor\frac nd\rfloor[\gcd(d,k)=1]\sum_{j=1}^{\lfloor\frac nd\rfloor}[\gcd(j,k)=1] \]

数论分块,后面那个东西可以直接预处理,前面的就是要求 \(\mu\)\([\gcd(i,k)=1]\) 点积的块筛,根据剥点积技巧 \((a\cdot c)*(b\cdot c)=(a*b)\cdot c\),卷上 \([\gcd(i,k)=1]\) 后杜教筛即可。

复杂度 \(O(n^{\frac 23}+k\log k)\)

281 U77200 等腰直角三角形

题意:计算 \(\sum_{i=1}^n\varphi(ix)\)

为了抄式子为了简便,以 \(\mu(ix)\) 的块筛为例。

假设 \(\mu(x)\ne 0\),否则是平凡的。

虽说本题函数并不是积性函数不能定义贝尔级数,但我们可以写出一个类似的形式:

\[F_p(z)=\begin{cases}1-z&\gcd(x,p)=1\\-1&\text{otherwise}\end{cases} \]

为了使其常数项为 \(1\),我们令 \(G_p(z)=\begin{cases}1&\gcd(x,p)=1\\-1&\text{otherwise}\end{cases}\),那么 \(\frac{f(z)}{g(z)}\) 就是一个积性函数了,可以杜教筛。

同时也不难发现 \(g(z)=\mu(x)\),于是该题在 \(O(n^{\frac 23})\) 内解决。

\(\varphi(ix)\) 的块筛可以得到类似的结果。

但这个做法的局限性较大,其对函数 \(f(ix)\) 有较高的要求,因此也不是很有用。

282 P9157 「GLR-R4」夏至

\(p\)\(x\) 的最大素因子,\(c\) 为其在 \(x\) 中的次数。

\[F(n,x)=\sum_{i=1}^n f(ix)=\sum_{i\geqslant 0}f(p^{c+i})(F(\lfloor\frac n{p^i}\rfloor,\frac{x}{p^c})-F(\lfloor\frac{n}{p^{i+1}}\rfloor,\frac{x}{p^{c-1}})) \]

记忆化搜索,\(x=1\) 时使用 Powerful Number 筛,官方题解说状态量和转移量都很少?????

283 CF913G Power Substring

直接枚举这个子串所处的位置,枚举位置 \(m\) 我们有:

\[2^k\equiv a\times 10^m+b\pmod{10^{n+m}} \]

注意到 \(2^{n+m}\mid 2^k,10^{n+m}\),因此我们可以得到:

\[2^{k-n-m}\equiv\frac{a\times 10^m+b}{2^{n+m}}\pmod{5^{n+m}} \]

我们任取一个 \(b\equiv -a\times 10^m\pmod{2^{n+m}}\),那么右式可以直接写作 \(x\),而由于 \(2\) 是任意 \(5^t\) 下的原根(还不会证,不过可以暴力验证),因此一定有解。

但是不能直接 BSGS,我们增量构造,若我们有 \(2^{k_0}\equiv x\pmod{5^t}\) 则需要构造 \(k\) 使得 \(2^k\equiv x\pmod{5^{t+1}}\),可以发现:

\[2^k\equiv x\pmod{5^t}\Rightarrow k\equiv k_0\pmod{\varphi(5^t)} \]

暴力枚举 \(5\) 个可能答案检验即可。

284 P6690 一次函数

注意到常数项为 \(0\) 的函数一定是没有用的,我们只考虑 \(0\leqslant a<p,1\leqslant b<p\) 的数域。

求出模 \(p\) 下的原根 \(g\),我们断言 \(G=x+g\) 是给定数域下的原根。

证明:\(G^i=ig^{i-1}x+g^i\),若 \(G^i=G^j\),根据常数项相等可知 \(i\equiv j\pmod{p-1}\),那么一次项相等可以推出 \(i\equiv j\pmod p\),因此周期大小为 \(p(p-1)\) 的倍数,即等于 \(p(p-1)\)

使用 BSGS+exgcd 可以求出该数域下的“离散对数”(这里 BSGS 记得平衡一下询问复杂度),那么问题变为选出一个最小的集合使得 \(\gcd\) 为给定数 \(X\) 的因子。

将每个数 \(a_i\) 变为 \(\frac{a_i}{\gcd(a_i,X)}\),那么就是要 \(\gcd=1\)\(O(2^{\omega(n)}\operatorname{poly}(n))\) 状压 dp 即可。还原方案是简单的。

285 CF765G Math, math everywhere

答案模 \(\prod p_i\) 形成周期,只需考虑 \(a_i=1\) 的情况最后乘上 \(\prod p_i^{a_i-1}\)

中国剩余定理告诉我们依次确定 \(X\)\(p_i\) 的值可以唯一地确定 \(X\),根据这个取值组我们也能还原出 \(\forall_i [\gcd(k+i,n)=1]\),因此我们得到了一个 \(O(np_i2^m)\) 的做法。

\(>m\) 的素数一定只会在字符串内影响一个位置,我们可以 \(O(2^mm)\) dp 出 \(\leqslant m\) 的素数生成的每个字符串,之后我们便只关心 \(0\)\(1\) 的数量,做一个 \(O(nm)\) 的dp 即可。

上述做法仍然不能通过,注意到 \(29,31,37\) 这三个素数只会出现两次,若我们将串分作长度 \(11,18,11\) 的三段,那么若出现两次一定不影响中间。于是我们状压两头,中间记录 \(1\) 的个数 dp 即可。

实现细节懒得管了!!

posted @ 2023-04-12 20:31  xiaoziyao  阅读(367)  评论(1)    收藏  举报