- 博客(5)
- 收藏
- 关注
原创 [bzoj4550] 小奇的博弈
题目大意略…分析首先单独分析一对石子(相邻的且左边白右边黑):第一步如果白棋向右走,可以把间隔减小任意步,轮到黑棋的时候,黑棋显然也可以减小间隔。如果某一方无法缩小间隔,而往另一方向,另一方可以再贴上去,走反方向显然不是最优的。 然后就可以把一对石子看成一堆石子了。 现在有k/2对石子,每次可以选择1到d对,那么就是NimK问题。NimK先手必败的条件:把每堆石子看成二进制,对于二进制每一位,所
2017-07-14 15:13:17 816
原创 [bzoj4545] DQS的trie
题目大意有一个非严格的Trie,有三种操作:新加一个子树、求Trie上本质不同的字符串个数、询问一个字符串在trie上的出现次数。分析很容易想到用SAM来做。 在线用LCT维护即可。 然而这题允许离线,这里我用了个离线的做法。 首先把最终的trie构出来,建个SAM,然后每当新加入节点就把相应的信息加进去。 现在看看如何处理两个询问: 1. 询问本质不同的字符串个数。这个显然等于当前SAM
2017-07-13 19:45:35 536
原创 [bzoj4872] [Shoi2017]分手是祝愿
题目大意有N盏灯,给定了初始状态。N个开关,第i个开关可以同时改变它的约数的开、关状态。现在给定一个k。若对于当前状态,最快可以在k步内使所有灯关闭,那么就按照最少操作数进行操作,否则随机选择开关。求步数的期望乘n!模100003的值。N≤100000分析首先考虑如何对于一个状态求最小步数。 由于编号小的开关不会影响到后面的灯,所以应该按编号从大到小决策。对于当前枚举到的灯i,如果它是开着的,那么
2017-07-11 15:01:21 602
原创 [CF822E]Liar
题目大意给定两个字符串S和T。你可以把S分成若干段,从左到右从1开始编号。现在要从你分出来的段中取出不超过x段,按编号从小到大依次拼接成字符串T。问是否有可行解。1≤|T|≤|S|≤100000 x≤30分析考虑DP。设f[i][j]表示用了S的前i个字符,取出了j段,最大能得到T的前多少个字符。 转移分两种情况: 1. f[i][j]—>f[i+1][j] 表示字符i+1单独成段且没被选
2017-07-11 09:41:24 967
原创 [bzoj4870] [Shoi2017]组合数问题
题目大意略…分析注意到一个重要的条件:t< k 那么根据组合数的意义,可以理解为从nk件物品里取若干件,满足取出物件数量模k等于t的方案数。 又发现k很小,然后可以设出DP:设f[i][j]表示前i件物品取的件数模k等于j的方案数。转移很显然。 用矩阵乘法可以做到O(k3lognk)O(k^3lognk) 然而这个DP满足结合律,即假设我们已经求出了数组f[n][],可以求出f[2n][],
2017-07-09 21:18:26 541
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人