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))。