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\times 7\times 11\times 13)\),这个东西可以使用各种方法得到,比如阶和 \(\varphi\)
那么把 \(dp\) 式子写出其 \(\mathrm{OGF}\) 就可以得到转移是一个循环卷积的形式
那么可以预处理 \(138\) 位,然后多项式快速幂做,不够的部分可以暴力跑一下