摘要: "传送门" 代码极短 $O(n^2)$dp是设$f_{i,j,k}$表示前$i$位,放了$j$个1,后面还可以接着放$k$个0的方案,转移的话,如果放0,$k$就要减1,反之放了1,后面可以多放一个0,所以$k$加1,即$$f_{i+1,j,k 1}+=f_{i,j,k}$$$$f_{i+1,j+1 阅读全文
posted @ 2018-10-03 17:45 ✡smy✡ 阅读(84) 评论(0) 推荐(0) 编辑
摘要: "传送门" 因为一个木板可以切掉最多$m$,所以可以先预处理哪些长度的木板可用,开个桶,然后对$[l m,l]$打标记,再把打了标记的数取出来 假设可用长度$a_1,a_2,,,a_n$从小到大排好了序,我们可以先不用$a_1$,只用后面的长度拼,然后用$a_1$凑,所以设$di_i$为能用后面的凑 阅读全文
posted @ 2018-10-03 11:10 ✡smy✡ 阅读(132) 评论(0) 推荐(0) 编辑
摘要: "传送门" 单串匹配显然用$kmp$ 一个暴力的dp是设$f_{i,j}$,表示前$i$位, 正在匹配 给定串第$j$位的方案,转移就枚举下一位放什么,然后使用$kmp$看会匹配到给定串的哪位 但是$n$非常大,注意到$f_{i,j} f_{i+1,k}$这样的转移可以抽象为一条从$j$到$k$的边 阅读全文
posted @ 2018-10-03 10:51 ✡smy✡ 阅读(94) 评论(0) 推荐(0) 编辑
摘要: "传送门" 异或最大值应该是要用$trie$树,从高位往低位贪心,虽然这里询问区间的数都要加上$x$,但是仍然可以利用这个思想 从高往低位考虑,我们要找一个加上$x$后当前二进制位$j$不等于$b$的当前位的数,假设$b$当前位为0,我们就要现在找个数加上$x$后当前位$j$为1,记之前选出的数为$ 阅读全文
posted @ 2018-10-03 10:18 ✡smy✡ 阅读(82) 评论(0) 推荐(0) 编辑
摘要: "传送门" ~~编号好评~~ 先把所有数记个前缀和,然后对于某一个右端点$r(r\geq L)$,能计入答案的$l$的范围为$[\max(r R,0),r L]$ 可以开一个大根堆,先对于所有右端点$r$,加入$pre_r \min(pre_{l})$,然后每次取出堆顶加入答案,弹掉堆顶,同时如果这 阅读全文
posted @ 2018-10-03 10:02 ✡smy✡ 阅读(94) 评论(0) 推荐(0) 编辑