好难,不会做。
1. 序列的值
其实读完题还不是很理解题意,后来看的题解。数据范围1e5,显然枚举所有的子序列是不可能的,然后考虑每一个元素对结果贡献,问题就变成这个数在那些序列里面对结果的贡献会增加。这个情况是,该数最高为1的位,前面的数的异或该位为0的子序列,加上这个数构成的子序列才是满足要求的,如果前面xor的结果相应位为1,加上这个数的xor结果是要变小的。然后考虑有多少种这种情况,记这个数前面该位为1的个数为a,该位为0的个数为b,这个数后面的个数为n - 1 - a - b, 然后结果就是前面该位为1的数取偶数个,该位为0的个数随便, 后面也是所有的子集,然后结果就是 2^(a - 1) * 2^b * 2 ^(n - 1 - a - b), 然后所有的数加起来就是最后的答案。
2. 快速乘法
题意就是一个数二进制表示,通过加减使得二进制表示中1的个数最小。
应该算原题吧: https://hihocoder.com/contest/hihointerview21/problem/3
我直接从这里抄的答案,就过了。
3. 太难,看题解,还需要fft这个东西,对我难度太大。
4. 不上升序列
看大家提交的速度很快,但是不会做。
http://codeforces.com/contest/13/problem/C
http://codeforces.com/contest/714/problem/E
跟这个题目是一致的,但是本题数据范围很大。
数据范围小的,可以采用n^2的dp,数据范围大的,只能采取优先队列, nlogn,这个做法是折线,拐点, 我不是很理解。