AtCoder Regular Contest 151 题解
题解
A
不难想的一道题,细节可能难写一点
首先,我们发现,若对于 \(i\) 来说,\(s_i\) 和 \(t_i\) 相等,则这个地方选什么都是对答案没有影响的,所以我们都选 0 ,再考虑相同的,贪心的选,前面都填 0 ,直到有一个串再填 0 没法保证汉明距离相同了,就按照顺序填完
B
本蒟蒻真正意义上做的第一道计数题,给了我很大的启迪
黄队说的好,计数题要么不重不漏,要么容斥,这个题好像两者都行?
官方题解里给的好像是类似容斥的,我没大看懂
其实比赛的时候就已经差不多想出来了,但没写出来
我们枚举每一个位置,同时使用并查集来辅助
枚举每一个位置时,我们要计算出当前位置之前的位置字符都相同,这一位置正好不同的方案数
很好判断,如果当前的 \(i = p_i\),那直接跳过就行了,因为这一位不可能不同
我们操作完了之后,把 \(i\) 和 \(p_i\) 用并查集连起来,代表其要取一样的值
同时我们也知道了,如果\(find(i)=find(p_i)\),那也可以跳过了
具体处理推推柿子就出来了,不写了
另外,这道题非常容易爆 \(long \,long\),请尽量使用快速乘,并对有关 \(m\) 的乘积进行预处理
浙公网安备 33010602011771号