A. A
考虑枚举中位数,然后求一个最大的平均值
那么显然是在左边和右边取相同数量的最大值
发现这个东西是一个单峰函数,所以上个三分就能过了
比较尴尬的是考场第一次写三分,没有判断 (f(lmid)=f(rmid)) 的情况,挂掉很可观的分数
其实对于偶数的情况考虑右边的数的贡献就能证明必然相连,更进一步还能证明不存在偶数比奇数更优的情况
B. B
设 (dp[i][j][0/1]) 表示前 (i) 个数有 (j) 对冲突,最后一个数是不是构成冲突的方案数
那么转移考虑新加入的数是不是构成一个新的冲突就能得到 (7) 个转移
f[i+1][j][1]=add(f[i][j][1],f[i+1][j][1]);
f[i+1][j][0]=add(f[i+1][j][0],f[i][j][0]*max(i-j-1,0ll)%mod);
f[i+1][j][0]=add(f[i+1][j][0],f[i][j][1]*max(i-j,0ll)%mod);
if(j<i){
f[i+1][j+1][1]=add(f[i][j][0]*2%mod,f[i+1][j+1][1]);
f[i+1][j+1][1]=add(f[i][j][1],f[i+1][j+1][1]);
}
if(j>=1){
f[i+1][j-1][0]=add(f[i+1][j-1][0],f[i][j][0]*j%mod);
f[i+1][j-1][0]=add(f[i+1][j-1][0],f[i][j][1]*(j-1)%mod);
}
C.C
首先注意 (FFT) 预处理单位根的时候是 (complex){cos(pi/len*j),opt*sin(pi/len*j)};
也就是把 (j) 放到里面
不难写出来一个很多维的 (dp) ,每次枚举能新加入的数字来转移,最后再限制 (2,5) 做一次
同时也可以把它压到 (2) 维,也就是取 (3,7,11,47) 的公倍数,最后除一下
考虑有这样一个东西:(10^{138} equiv 1 mod (3 imes 7 imes 11 imes 13)),这个东西可以使用各种方法得到,比如阶和 (varphi)
那么把 (dp) 式子写出其 (mathrm{OGF}) 就可以得到转移是一个循环卷积的形式
那么可以预处理 (138) 位,然后多项式快速幂做,不够的部分可以暴力跑一下