原题链接:F - Spices
思路:
贪心;将1~-1个数的花费按从小到大排序,组成新序列(p1,p2,....,p2n-1),从前往后扫描新序列,首先置集合s为空,每扫描到序列中的pi时检查集合s中的数能不能经过异或得到s,若能得到则不加入继续扫描下一个数,若不能能得到则直接将pi加入集合s中;这样最多加入n次s中的数便可异或得到1~
-1的所有数. 扫描n次每次检查复杂度
,总复杂度o(n*
)
证明:
- 为什么加入n个数后集合s中的数就能异或得到所有
-1个数?设集合s中的数能异或得到(a1,a2.....,am),则加入不等于ai的的数x后,则s中的数比原来能多表示(x,a1^x,.....am^x)这m+1个数(ai^x不属于(a1,a2,.....,am),否则可以通过异或ai得到x),故每次加