CF1450H2 - Multithreading (Hard Version)
CF1450H2 - Multithreading (Hard Version)
题目大意
给定一个均分成$n$份($n$为偶数)的圆,每份上有一个元素为0/1,其中一些元素的值未知,且随机
当存在一个方案,0和0连线,1和1连线,使得每个元素都被恰好连一条线时,称环$c$合法
定义$f(c)$为上述连线方案中 不同色连线交叉的最小次数
同时需要支持修改元素,求$f(c)$的期望
贪心求解指定环
首先考虑一个Naive的贪心,在环上一旦出现相邻两点同色,就将他们连线然后删除
直到最后,就将变成01交替,设此时环长$n’$,考虑再让相邻的00,11连线
则得到交叉个数为$\frac{n’} {4}$
这个贪心甚至连不带修的情况都做不了
简化求解
考虑上面贪心过程中被抵消的点
容易发现一定是一个奇数位置的点去抵消一个偶数位置的点
并且抵消之后其他位置的奇偶性保持不变
因此猜想最终剩下的黑点数量就是$|cnt_{odd}-cnt_{even}|$
其中$cnt_{odd},cnt_{even}$表示已经确定的1元素在奇数/偶数位上的个数
也容易证明
根据贪心,显然同奇偶的点无法抵消,因此$ans\ge |cnt_{odd}-cnt_{even}|$
而一旦存在两个不同奇偶的黑点,若他们不相邻
则他们之间一定存在一对相邻白点(否则奇偶性不对),进而不断合并白点使得它们相邻
白点可以对称得到相同值的式子,最终得到答案就是
$\displaystyle \frac{|cnt_{odd}-cnt_{even}|} {2}$
答案式子
设已经确定的部分$\delta=cnt_{odd}-cnt_{even}$,未确定的部分包含$x$个奇数位置,$y$个偶数位置
则Naive的计算答案式子为
$\displaystyle Sum=\sum_{i=0}^x \sum_{j=0}^y \frac{1} {2}\cdot [2|i-j+\delta] \cdot |\delta+i-j|\binom{x} {i}\binom{y} {j}$
NTT
补上方案数$2^{x+y-1}$(因为只有一半的方案奇偶性相同),用$y-j$代换$j$
$\displaystyle E=\frac{1} {2^{x+y} }\sum_{i=0}^x \sum_{j=0}^y \cdot [2|i-y+j+\delta] \cdot |\delta+i-y+j|\binom{x} {i}\binom{y} {j}$
转换为$\displaystyle i+j\leftarrow \binom{x} {i}\binom{y} {j}$的形式后,带入组合意义合并$i,j$
$\displaystyle E=\frac{1} {2^{x+y} }\sum_{i=0}^{x+y} \cdot [2|\delta-y+i] \cdot |\delta-y+i|\binom{x+y} {i}$
不妨设$\delta’=\delta-y$
$\displaystyle E=\frac{1} {2^{x+y} }\sum_{i=0}^{x+y} \cdot [\delta’\equiv i\pmod 2] \cdot |\delta’+i|\binom{x+y} {i}$
根据$\delta’+i$的正负性容易确定一个范围,范围两边都是计算都转化为
$\displaystyle S(n,m)=\sum _{i=0}^m [2\not |i]\cdot i\cdot \binom{n} {i}$
$\displaystyle S(n,m)=\sum _{i=0}^m [2\not |i]\cdot n\cdot \frac{(n-1)!} {(n-i)!(i-1)!}$
$\displaystyle S(n,m)=n\sum _{i=0}^{m-1} [2 |i]\cdot \binom{n-1} {i}$
形如$\displaystyle m|2, S’(n,m)=\sum _{i=0}^m [2|i]\cdot \binom{n} {i} $,可以转化为
$\displaystyle S’(n,m)=\sum _{i=0}^m 2|i$
$\displaystyle S’(n,m)=\sum _{i=0}^m \binom{n-1} {i}$
组合数关于$m$一维的前缀和是一个经典的步移问题
$S(n,m-1)=S(n,m)-C(n,m)$
$S(n,m+1)=S(n,m)+C(n,m+1)$
$S(n+1,m)=\displaystyle \sum_{i=0}^m C(n+1,m)=\sum_{i=0}^mC(n,i)+\sum_{i=0}^{m-1}C(n,i-1)=2S(n,m)-C(n,m)$
$\displaystyle S(n-1,m)=\frac{S(n,m)+C(n-1,m)} {2}$
封装一下计算即可,复杂度为$O(n)$
真的只是一点点麻烦
1 |
|