2018/3/23
T1 T2 又是一个神的不行的题。。。。这两天怎么全是神题啊
T1 young
考虑按照现在m位是0还是1分成s,t两个集合,设f[n][m]为有n个点,点权在 0~1<<m 之内最小生成树的期望边权和,设g[s][t][m]为用0~1<<m 中的边将s,t集合连在一起的边的期望和
那么最终的答案就是f[n][m]
f[n][m]=C(n,s)*(2^(n-s)*(m-1)*f[s][m-1] + 2^(s*(m-1))*f[n-s][m-1] + g[s][t][m-1] + 2^(n+1)*(m-1))
然后g可以这么转移出来,设p[s][t][m][k]为最小的边大于等于k的时候的方案数,那么g[s][t][m]=p[s][t][m][k](1<=k<(1<<m-1))
然后p的话也是类似f,就是在分出s0,s1,t0,t1,然后如果四个都存在的话就是直接分别递归处理然后乘起来,如果只有s0,t0的话就是递归处理s0,t0,因为剩下的没有办法构成最小值,那么他们的点权就可以随便选(这个很容易被忘掉),
有几个很好的减枝就是强制n<m, 然后求p的时候(k<=(1<<m)) 就 return
T2 simple
这个题就是考虑如果一个的长度为n的数循环节小于n那么他就一定不可能是答案,然后如果一个数的循环节大于n,那么他循环构成的n个数字中,只有字典序最小的能贡献,然后我们通过mu容斥一下,就能推出来一个O(n)的式子,然后用杜教筛优化就好了
说的这么简单主要是不想打公式
T3 mate
这个题的主要难点就是模数不是素数,然后我们就是可以质因数分解,然后用一个堆来维护一下每一个因数的次数,以及全局的积就好了(能这么弄主要是因为每次式子的变化只有++,--,然后这么弄就比较快了)。
也可以用CRT,但是觉得没有这么弄简单