给你一个字符串$S$,然后$q$个询问,每次给出$S$的一个子串$T$。对于每个询问的子串$T$,Calabash可以在$S$中选择任意个以T作为后缀的子串,然后生成子串对应数目个石子堆,每堆的石子数量等于$w[对应子串在S中出现的次数]$。然后Rounddog可以从这么多堆石子中选择任意堆的石子(至少选一堆),两人开始玩Nim游戏,Calabash先手。现在问Calabash是否存在必胜策略,如果有输出Calabash在必胜策略下,能够选出来的最多的石子数目。
就是一道裸题,P4301 [CQOI2013] 新Nim游戏,即从大到小取,使得线性基里面元素异或起来为$0$。
建立一个$link$树,第一步倍增的跳到子串所在的集合。那个集合的出现次数,即为所有子树出现。考虑上面的贪心直接,暴力从大到小来插入集合即可。
- 分析下复杂度,线性基$O(60)$,首先不可能每个点都从结点插到父亲结点。显然一个结点插了$\geq60$次,一定存在$\oplus 0$。所有可以预处理所有结点的答案,询问就是$O(qlogn)$
傻逼题要用$unsigned\ long \ long!$
代码
1 |
|