A. Odd Set
看奇数和偶数的数的个数相不相等即可。
B. Plus and Multiply
枚举所有 \(a^k\) 然后判断能不能加若干次 \(b\) 的到 \(n\)。
C. Strange Function
令 \(g(i)=\text{lcm}(1,2,\dots,i)\),不难发现答案为 \(\sum_{}i\times(\lfloor\frac{n}{g(i-1)}\rfloor-\lfloor\frac{n}{g(i)}\rfloor)\)
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\) 有可能是负数所以还需全部加上一个常数。
考虑从小到大枚举,有如下转移:
我们发现这是一个背包。而背包可以用生成函数来表示。
形式化来讲,第 \(i\) 个数的生成函数即为
于是上面直接转移,再做两次回退即可。至于回退背包是什么,你可以看看这道题 消失之物。
这一部分复杂度 \(O(n^3)\)。
在算答案的时候先枚举公共前缀的长度,然后枚举不同的数是哪两个,然后所需逆序对数即知道了。复杂度 \(O(n^3)\)。