EM水题略过
B.Reverse Game
当时推了个奇怪的结论过了,如果按照逆序对进行考虑题目就十分简单(因为是翻转操作)
I. Modulo Permutations
- 题目大意:给出 n n n,求在 n ! n! n!种排列中,有多少种排列满足所有的 i i i满足 p i + 1 % p i < = 2 p_{i+1}\%p_i<=2 pi+1%pi<=2(环形排列)
- n < = 1 e 6 n<=1e6 n<=1e6
观察发现:可以把数组分为两段,一段从1开始,一段从2开始。每一段都要满足后一个数%前一个数<=2
例如:n=8的一种情况: [ 1 , 3 , 5 , 7 ] , [ 2 , 4 , 6 , 8 ] [1,3,5,7],[2,4,6,8] [1,3,5,7],[2,4,6,8],合并为 [ 1 , 3 , 5 , 7 , 2 , 4 , 6 , 8 ] [1,3,5,7,2,4,6,8] [1,3,5,7,2,4,6,8]即为合法答案
然后从1开始和从2开始的合并就是答案了。
考虑使用 d p [ a ] [ b ] dp[a][b] dp[a][b]表示第一个数组以a结尾,第二个数组以b结尾的方案数。
发现我们可以一段一段转移,就是只从 d p [ a ] [ a − 1 ] dp[a][a-1] dp[a][a−1]开始转移。
于是使用 d p [ x ] dp[x] dp[x]表示一段为x结尾,另一段以x-1结尾
然后转移可以从 d p [ x ] dp[x] dp[x]转移至 d p [ k ∗ ( x − 1 ) ] dp[k*(x-1)] dp[k∗