Processing math: 100%

04 2019 档案

摘要:题意:求a[1:i]的2 |border| // include define fi first define se second define db double define mp make_pair define pb push_back define mt make_tuple define 阅读全文
posted @ 2019-04-29 18:52 walfy 阅读(122) 评论(0) 推荐(0) 编辑
摘要:题意:给串s和t,对于串s每个位置有一个价值f,两种操作1.修改f[a]=b,2.查询串t子串Ta b在s的子串Sc d中出现位置的f和 题解:s和t建sam,把fail树按dfs序建bit套线段树,就变成了单点修改,子树(区间)查询区间个数 阅读全文
posted @ 2019-04-25 13:44 walfy 阅读(191) 评论(0) 推荐(0) 编辑
摘要:题意:n个物品每个价值a[i],要求选k个,可以重复,问能取到哪几个价值 题解:fft裸题.但是直接一次fft,然后快速幂会boom.这样是严格的220log2(220)log(w).需要在快速幂里fft,每次取最大的2的次幂,然后fft也boom了,不知道是不是写搓了.ntt过 阅读全文
posted @ 2019-04-22 20:37 walfy 阅读(277) 评论(0) 推荐(0) 编辑
摘要:题意:有n个串,询问每个串有多少子串在n个串中出现了至少k次. 题解:sam,每个节点开一个set维护该节点的字符串有哪几个串,启发式合并set,然后在sam上走一遍该串,对于每个可行的串,所有的fail都是可行的直接加上len,不可行就往fail上跳. ~~for(int i=0;s[i];i++ 阅读全文
posted @ 2019-04-22 14:31 walfy 阅读(144) 评论(0) 推荐(0) 编辑
摘要:题意比较麻烦略 题解:枚举前缀的中点,二分最远能扩展的地方,lcp来check,然后线段树维护每个点最远被覆盖的地方,然后查询线段树即可 // pragma GCC optimize(2) // pragma GCC optimize(3) // pragma GCC optimize(4) // 阅读全文
posted @ 2019-04-21 16:36 walfy 阅读(120) 评论(0) 推荐(0) 编辑
摘要:题意:ni=1nj=1nk=1ϕ(i)ϕ(j2)ϕ(k3)ϕ(i)ϕ(j)ϕ(k)ϕ(gcd(i,j,k)),1e4组询问,每次给$n(1 define fi first de 阅读全文
posted @ 2019-04-21 09:56 walfy 阅读(963) 评论(0) 推荐(0) 编辑
摘要:题意:给你两个串s,p,问你把s分开顺序不变,能不能用最多k段合成p. 题解:dp[i][j]表示s到了前i项,用了j段的最多能合成p的前缀是哪里,那么转移就是两种,dp[i+1][j]=dp[i][j],dp[i+lcp][j+1]=dp[i][j]+lcp,这里的lcp是dp[i][j]和i 阅读全文
posted @ 2019-04-19 13:30 walfy 阅读(203) 评论(0) 推荐(0) 编辑
摘要:题意:给n个串ti,ps,i是s在ti中出现的次数,要求找到s,使得ni=1cips,i|s|最大 题解:sam裸题,每次插入时相当于在fail链上到1的位置加ci,最后统一乘该节点状态的长度,我居然写了个lct维护!= =还wa了....后来发现打个标记topo一下 阅读全文
posted @ 2019-04-19 11:28 walfy 阅读(139) 评论(0) 推荐(0) 编辑
摘要:题意:给串s,每次询问k个数a,l个数b,问a和b作为后缀的lcp的综合 题解:和bzoj3879类似,反向sam日神仙...lcp就是fail树上的lca.把点抠出来建虚树,然后在上面dp即可.(感觉之前写的svt什么玩意) 阅读全文
posted @ 2019-04-18 21:13 walfy 阅读(126) 评论(0) 推荐(0) 编辑
摘要:题意:给3个字符串,问从1到min(l1,l2,l3)的长度的子串,找到从该位置长度为l,三个子串相同的三元组的个数 题解:把3个子串用分隔符串起来.然后分开统计每个节点在三个串中出现次数.最后乘起来就是该节点表示的三元组个数,然后l[fa[i]]+1到l[i]有贡献,对l差分一下就好了 // pr 阅读全文
posted @ 2019-04-16 20:24 walfy 阅读(190) 评论(0) 推荐(0) 编辑
摘要:题意:有一个串s,n个串模式串t,问s的子串中长度最小的包含t k次的长度是多少 题解:把所有t建ac自动机,把s在ac自动机上匹配.保存每个模式串在s中出现的位置.这里由于t两两不同最多只有xsqrt(x),x是总长度.然后双指针扫一遍即可 这里有一个很重要的优化技巧,由于ac自动机上不是每个点都 阅读全文
posted @ 2019-04-16 19:41 walfy 阅读(131) 评论(0) 推荐(0) 编辑
摘要:题意:给你一个字符串s有一些位置被ban了,字符串t的价值是|t| t在s中出现次数而且终点没有被ban.问你最大的价值是多少 题解:很明显t是s子串,建个sam,对于sam中每个位置,我们需要删除中点被ban的次数,只需要在sam上走一遍,到被ban的点时需要更新fa链,打个标记,根据topo序差 阅读全文
posted @ 2019-04-16 13:04 walfy 阅读(141) 评论(0) 推荐(0) 编辑
摘要:题意:给一个n k的循环字符串可能从任意地方断开,然后m个长度k的字符串,问你能不能用下面的字符串(每个最多用一次)构成上面的字符串,能循环移位 题解:对下面的串建ac自动机,记录字符串最后一个位置,然后把上面的串扩展k个,再在ac自动机上跑确定每个节点能匹配的字符串是谁,然后枚举k个位置作为起点, 阅读全文
posted @ 2019-04-16 12:43 walfy 阅读(212) 评论(0) 推荐(0) 编辑
摘要:题意:给你n个01字符,每次问你前缀的所有本质不同的子串,由摩斯密码组成的方案数和. 题解:离线处理,把字符建sam,通过topo序来dp计算每个节点表示的子串方案数的和.统计答案时,把n个字符挨个匹配过去,把所有经过的节点加上方案数,还有每个节点的fa链,也要统计(因为是当前串的后缀),用一个vi 阅读全文
posted @ 2019-04-16 10:56 walfy 阅读(168) 评论(0) 推荐(0) 编辑
摘要:题意:给一个数组,每次会删去连续重复两次的左侧部分及前面,有多个重复部分找长度最小和最靠左的部分,重复的数字最多10次 题解:根据重复数字只有10次,我们离散化后,以每两个相同数字作为起点能确定这重复的部分,一共10 n对,接下来问题就是判断这两部分是不是相同的,建sa用st表求lcp即可,然后对所 阅读全文
posted @ 2019-04-15 17:07 walfy 阅读(184) 评论(0) 推荐(0) 编辑
摘要:题意:定义一个串合法,在n个串中出现次数在li到ri中.问s的所有本质的子串有是多少合法的 题解:把所有串用分隔符分开建sam,记录一个该节点对应每个串的出现次数,topo排序后,当该节点s出现次数不为0,而且其他串出现次数满足条件,那么该节点对应的所有子串都满足条件(因为后缀相同,在同一个串中出现 阅读全文
posted @ 2019-04-15 14:58 walfy 阅读(143) 评论(0) 推荐(0) 编辑
摘要:题意:给你一个字符串,找第k大的子字符串.(考虑相同的字符串) 题解:建sam,先预处理出每个节点的出现次数,然后处理出每个节点下面的出现次数,然后在dfs时判断一下往哪边走即可,注意一下num会爆int // pragma GCC optimize(2) // pragma GCC optimiz 阅读全文
posted @ 2019-04-14 17:02 walfy 阅读(103) 评论(0) 推荐(0) 编辑
摘要:题意:要求维护两端加点的字符串,以及查询本质回文串个数和所有回文串个数 题解:pam,两端加点过程详见ioi2017国家集训队论文,维护一个最长回文前缀和最长回文后缀即可,fail不用两个,能前后共用一个.维护所有回文串个数,就是用增量法,每加一个点计算含这个点的回文串的个数(即当前回文后缀),即f 阅读全文
posted @ 2019-04-14 13:17 walfy 阅读(146) 评论(0) 推荐(0) 编辑
摘要:题意:给你一个子串,m次询问,每次给你abcd,问你子串sa b的所有子串和子串sc d的最长公共前缀是多长 题解:首先要求两个子串的最长公共前缀就是把反过来插入变成最长公共后缀,两个节点在parent树上的lca就是最长公共后缀.找到某个子串就是在parent树上倍增 我们先二分答案,问题就变成了 阅读全文
posted @ 2019-04-12 09:31 walfy 阅读(242) 评论(0) 推荐(0) 编辑
摘要:题意:给一个初始串s,和m个模式串,q次查询每次问你第l到第r个模式串中包含slsr子串的最大数量是多少 题解:把初始串和模式串用分隔符间隔然后建sam,我们需要找到在sam中表示slsr子串的状态节点(先找到sr对应的节点,然后倍增parent树即可),我们需要找到包含$ 阅读全文
posted @ 2019-04-07 13:42 walfy 阅读(148) 评论(0) 推荐(0) 编辑
摘要:题意:给一颗字典树,m次查询,每次给出一个字符串,问你该字符串是字典树上多少串的后缀 题解:字典树求广义sam,每次把查询串在sam上跑一遍,最后到达的点的sz就是答案,中途没法走了,就是没有出现过 // pragma GCC optimize(2) // pragma GCC optimize(3 阅读全文
posted @ 2019-04-06 14:20 walfy 阅读(602) 评论(0) 推荐(0) 编辑
摘要:题意:给你n个字符串,m次查询,每次问你第p个字符串的s到t的字符串在n个字符串建成的字典树上出现了多少次 题解:先建出字典树,在字典树上拓展sam,记录每个子串的出现次数.查询时只需找出在字典树上的t在sam中的位置,每次往fa跳(即后缀相同,长度减小)找到第一个长度比查询串的小于等于的位置就是答 阅读全文
posted @ 2019-04-06 13:50 walfy 阅读(181) 评论(0) 推荐(0) 编辑
摘要:题意:有棵树每个点有个颜色(不超过10种),每个节点不超过20个儿子,问你每两点之间的颜色序列不同的有多少种 题解:先建出树,对于每个叶子节点,bfs一遍建在sam上,每次保留当前点在sam上的位置,拓展时用父亲节点在sam上的位置当成last即可.然后统计sam本质不同的字符串有多少个 注:dfs 阅读全文
posted @ 2019-04-06 13:44 walfy 阅读(151) 评论(0) 推荐(0) 编辑
摘要:题意:两种操作1.加点2.查询点是否在之前给定点的凸包内 题解:set维护动态凸包,分别维护上下凸壳,对y取反就行,判断点是否在凸壳内,把点加进去看要不要删除就好了 // pragma GCC optimize(2) // pragma GCC optimize(3) // pragma GCC o 阅读全文
posted @ 2019-04-05 10:35 walfy 阅读(111) 评论(0) 推荐(0) 编辑
摘要:题解:带删点的维护凸包,1.删点2.查询凸包周长 题解:倒着做就成了带加点的维护凸包,加点时维护一下周长就没了 // pragma GCC optimize(2) // pragma GCC optimize(3) // pragma GCC optimize(4) // pragma GCC op 阅读全文
posted @ 2019-04-04 20:18 walfy 阅读(167) 评论(0) 推荐(0) 编辑
摘要:题意略 题解:可以列出dp方程dp[i]=max(dp[j]a[i]c[j]+b[i]a[j]c[j]+b[j],化简可以得到$\frac{dp[i]}{b[i]}=\frac{a[i]}{b[i]} \frac{dp[j] c[j]}{a[j] c[j]+b[j]} 阅读全文
posted @ 2019-04-04 19:07 walfy 阅读(208) 评论(0) 推荐(0) 编辑
摘要:题意:给一个数组s,求f(sa|sb)f(sc)f(sdse),f是斐波那契数列,而且要满足sa&sb==0,(sa|sb)&sc&(sdse)=2i 题解:先求$A_k=f(k) \sum_{i|j==k\ 阅读全文
posted @ 2019-04-03 15:55 walfy 阅读(171) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示