摘要: 由nim游戏的结论,显然等价于去掉一些数使剩下的数异或和为0。 暴力的dp比较显然,设f[i][j][k]为前i堆移走j堆(模意义下)后异或和为k的方案数。注意到总石子数量不超过1e7,按ai从小到大排序,这样k的枚举范围就不会超过2ai,于是复杂度O(md)。 注意空间卡的非常紧,连滚动都开不下, 阅读全文
posted @ 2018-10-27 17:46 Gloid 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 注意到k与n同阶,考虑构造一种枚举子集的方式,使得尽量先枚举较小的子集。首先sort一下,用堆维护待选子集。每次取出最小子集,并加入:1.将子集中最大数ai替换为ai+1 2.直接向子集中添加ai+1 这两个子集(若不存在ai+1则不操作)。如此操作k次即可得到第一问的答案。 对于正确性,我们证明当 阅读全文
posted @ 2018-10-27 16:42 Gloid 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 当然可以在SA上二分答案,但看起来会被卡log。考虑对模板串建出AC自动机,用母串在上面跑,标记上所有能到达的点。注意到达某个点时需要标记所有其通过fail指针可以走到的点,如果遇到一个标记过的点就可以退出,因为显然后面所指向的已被标记。查询时由每个模板串的结尾节点向上暴力找第一个被标记的点即可。 阅读全文
posted @ 2018-10-27 02:50 Gloid 阅读(300) 评论(0) 推荐(0) 编辑
摘要: 考虑套路地将1~n依次加入排列。设f[i][j]为已将1~i加入排列,有j对不合法的方案数。加入i+1时可能减少一对不合法的,可能不变,可能增加一对,对于i+1与i的关系再增设0/1/2状态表示i与左边/右边的数是否构成不合法对即可。 阅读全文
posted @ 2018-10-27 02:01 Gloid 阅读(164) 评论(0) 推荐(0) 编辑