摘要: 一开始想拆位。。但显然没法应对进位啊什么的。 所以维护每一个长度的后缀。 查询有多少个a&2^i>0,也就是长度为(i+1)的后缀里,值为2^i...2^(i+1)-1的数有多少个。 前缀和一波就好了。。整体加就开个变量记着,查询的时候再分一下类。 1 #include<cstdio> 2 #inc 阅读全文
posted @ 2016-06-28 14:49 czllgzmzl 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 弦图判定。。MCS算法。 先选一个点,然后每次拿 相邻已选点最多 的未选点。 选完之后判断一下是否是完美消除序列。 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<algorithm> 5 #define 阅读全文
posted @ 2016-06-28 14:28 czllgzmzl 阅读(200) 评论(0) 推荐(0) 编辑
摘要: AC自动机+树状数组。 先把fail边反向建出fail树来。。 第x个字符串在第y个字符串中出现了多少次。对于y的每个前缀,如果它结尾可以通过fail跳到x的结尾的话,那么就出现了x。。 也就是查询x的fail子树中,有多少个y的节点。 在trie上暴力跑,在树状数组上加入根到当前节点路径上的点(将 阅读全文
posted @ 2016-06-28 14:07 czllgzmzl 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 莫队+暴力。。 对于>100的模数p,每次暴力查k,p+k,2p+k.....就好了。 对于<=100的模数,就在莫队的时候处理出来就好了。。。 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<algori 阅读全文
posted @ 2016-06-28 09:31 czllgzmzl 阅读(141) 评论(0) 推荐(0) 编辑
摘要: AC自动机。 是否存在无限长的不存在非法子串的串。。。也就是询问trie图上有没有不经过非法点的环。 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<algorithm> 5 using namespace 阅读全文
posted @ 2016-06-28 09:24 czllgzmzl 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 第一眼:这好像是数位DP? 然后看了下来源......银组题?...肯定是我想多了 妈呀银组题竟然出数位DP.... 处理出f[i][j]表示i位,0比1至少多j个的方案数。 但因为涉及负数什么的。。所以预处理一下组合数,每次用到的时候再强行枚举算出来。。 1 #include<cstdio> 2 阅读全文
posted @ 2016-06-28 09:22 czllgzmzl 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 平面图判定。。好高大上的东西。。 然而题目保证有个n元环= =。。。所以只要判断一下,非环边能否做到不相交。 接下来有各种姿势。。。 可以将边看成点,不能放在环的同一侧(会相交)的边之间连边,判断新图是否为二分图(没有奇环); 还可以上2-sat。。。。 或者可以用并查集...其实就是因为这题2-s 阅读全文
posted @ 2016-06-28 09:19 czllgzmzl 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 还是膜网上题解QAQ 从低到高考虑,这样就不会影响后挪的草了。 每次把草贪心地挪到代价较小的一边。位置为i的草,花费为min( 1..i-1中更高的草的数目,i+1..n中更高的草的数目 ) 因为更小的草已经被挪到两边了..所以代价就是更高的草的数目。 拿个树状数组统计一下就好了。 1 #inclu 阅读全文
posted @ 2016-06-28 09:07 czllgzmzl 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 膜了半天sxt和网上题解。。。 http://www.cnblogs.com/BLADEVIL/p/3490321.html 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #define ll long long 5 us 阅读全文
posted @ 2016-06-28 08:57 czllgzmzl 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 还是比较好想到的..设第一个数为x,那么以后的所有数都能用x和M表示出来。 然后再根据非递减的限制条件得出x的取值范围。 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #define ll long long 5 usin 阅读全文
posted @ 2016-06-28 08:48 czllgzmzl 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 费用流。 因为有能力爆发这种鬼东西。。每次能力爆发就相当于重新开始一条路径...除此以外就和一般的题一样了。。 拆点,每个点从出点往能到达的入点连流量正无穷,费用为航行时间的边。 每个点从入点往出点连一条流量为1,费用为0的边限制。 S往入点,出点往T连流量为1,费用为0的边。 S往出点连流量为1, 阅读全文
posted @ 2016-06-28 08:43 czllgzmzl 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 交换一下行列对答案显然是没有影响的。。 所以先把障碍都挪到主对角线上。。然后就是错排问题了..... f[i]=(f[i-1]+f[i-2])*(i-1) 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<a 阅读全文
posted @ 2016-06-28 08:29 czllgzmzl 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 将两堆东西并起来(前面那堆就倒过来了)...然后就是在一列数里面跑来跑去... 这个显然可以树状数组维护一波。。 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<algorithm> 5 #define l 阅读全文
posted @ 2016-06-28 08:12 czllgzmzl 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 概率DP。 首先由题解可得>_<,胜出概率只与剩余人数、与庄家的相对位置有关。 所以设f[i][j]表示剩下i个人,从庄家开始第j个人的胜利概率。。。 根据卡牌一通乱搞即可。。。 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 阅读全文
posted @ 2016-06-28 08:04 czllgzmzl 阅读(166) 评论(0) 推荐(0) 编辑