题解-CF1542

A. Odd Set

看奇数和偶数的数的个数相不相等即可。

B. Plus and Multiply

枚举所有 (a^k) 然后判断能不能加若干次 (b) 的到 (n)

C. Strange Function

(g(i)= ext{lcm}(1,2,dots,i)),不难发现答案为 (sum_{}i imes(lfloorfrac{n}{g(i-1)} floor-lfloorfrac{n}{g(i)} floor))

D. Priority Queue

考虑对于每个 (x) 的贡献,首先他得被选中,记这次操作为 (X),然后还不能被删掉。考虑对这样的 (B) 计数。形式化讲就是被选中后遇到减号时小于 (x) 的数的个数得大于 (0)

考虑 (dp),记 (f[i,j]) 代表前 (i) 个操作有 (j) 个小于 (x) 的数的方案数((X) 操作后,也就是说我们 dp 时是不包含操作 (X) 的。)。有如下转移:(f[i,j]=f[i-1,j],f[i,(j-1,0)]=f[i-1,j](i<X),f[i,j-1]=f[i-1,j](i>X),f[i,j+1]=f[i-1,j](x_i<=x_X)),注意遇到相同的时候加一个字典序就可以去重了。

E. Abnormal Permutation Pairs

orz dead_x 爆切 E2。

思路来自神蛙。

(f[i,j]) 代表长度为 (i) 的两个排列逆序对之差为 (j) 的方案数。

由于这个 (j) 有可能是负数所以还需全部加上一个常数。

考虑从小到大枚举,有如下转移:

[f[i,j]=f[i-1,k] imessum_{k_1=0}^{i}sum_{k_2=0}^{i}[k_2-k_1=j-k] ]

我们发现这是一个背包。而背包可以用生成函数来表示。

形式化来讲,第 (i) 个数的生成函数即为

[sum_{j=0}^{i-1}x^jsum_{j=0}^{i-1}x^{-j}=frac{x^{i+1}+x^{-i+1}-2x}{(x-1)^2} ]

于是上面直接转移,再做两次回退即可。至于回退背包是什么,你可以看看这道题 消失之物

这一部分复杂度 (O(n^3))

在算答案的时候先枚举公共前缀的长度,然后枚举不同的数是哪两个,然后所需逆序对数即知道了。复杂度 (O(n^3))

原文地址:https://www.cnblogs.com/zcr-blog/p/14968954.html