abc212-solution-post
ABC212 Solution
C - Min Difference
把 \(b\) 排序,枚举 \(a\) 数组每个数,直接在 \(b\) 里面 lower_bound 更新答案即可。
D - Querying Multiset
随便怎么写个堆或者平衡树都可以。
E - Safety Journey
设 \(dp_{x,y}\) 表示走 \(y\) 步到 \(x\) 的方案数。
转移的话把所有不和它断开边的点的 \(dp\) 值加过来就好了。
这个可以优化,我们改成上一层所有 \(dp\) 值的和减去和它断开边的点的 \(dp\) 值。减号前面可以每次记录。
复杂度 \(\mathcal O(nm)\),建议滚掉 \(dp\) 第一维。
F - Greedy Takahashi
记录每趟 bus 走 \(2^k\) 趟 bus 到的 bus,询问直接跳即可。好像要分一些类。
G - Power Pair
先判掉 \(x=y=0\),那么现在 \(x,y\in[1,p-1]\)。设 \(p\) 的一个原根为 \(r\)。
因为 \(r^1\sim r^{p-1}\) 不重复地取遍 \(1\sim p-1\) 这 \(p-1\) 个数,对于 \(x,y\),可以找到唯一的 \(a,b\) 满足 \(x=r^a,y=r^b\)。
原式化为 \(r^{an}\equiv r^b\pmod p\),即 \(an\equiv b\pmod{p-1}\)。
现在要计数满足条件的 \((a,b)\) 使得存在 \(n\) 满足上式。
固定 \(a\),如果 \(\gcd(a,p-1)=1\),满足条件的 \(b\) 显然有 \(p-1\) 个。
否则我们除掉这个 \(\gcd\),满足条件的 \(b\) 的数量当然也要同时除掉这个 \(\gcd\)。
那么一个 \(a\) 满足条件的 \(b\) 的数量就是 \(\frac{p-1}{\gcd(a,p-1)}\)。
要求的即为
这里的 \(\varphi\) 可以搜索一下递推出来,但是直接根号求也可以过。怎么都比官方题解的 \(\mathcal O(d^2(p-1))\) 快多了。
H - Nim Counting
把 \(a\) 数组存到桶里,做 \(m-1\) 次自异或卷积得到的常数项即为挑 \(m\) 个数异或和为 \(0\) 的方案数。
现在要求 \(m\) 取 \(1\sim n\) 的方案数和,我们设原多项式(桶)为 \(F\),要求的即为
直接等比数列求和带走就好了(应该?没写)。

浙公网安备 33010602011771号