摘要: 两个串匹配时相匹配的位置位置差是相同的,那么翻转一个串就变成位置和相同,卷积的形式。 考虑如何使用卷积体现两个位置能否匹配。一个暴力的思路是每次只考虑一种字符,将其在一个串中设为1,并在另一个串中将不是该字符且不是通配符的设为1,卷积结果不为0则无法匹配。这样要跑26次1e6的FFT,就算有6s也… 阅读全文
posted @ 2018-08-09 23:14 Gloid 阅读(178) 评论(0) 推荐(0)
摘要: 思路比较直观。设A(x)=Σxai。先把只选一种的统计进去。然后考虑选两种,这个直接A(x)自己卷起来就好了,要去掉选同一种的情况然后除以2。现在得到了选两种的每种权值的方案数,再把这个卷上A(x)。得到这个后考虑去重,其中重复的就是选了两个相同的和另外一个,那么再把选两个相同的生成函数搞出来卷上A 阅读全文
posted @ 2018-08-09 21:42 Gloid 阅读(184) 评论(0) 推荐(0)
摘要: 显然构造出生成函数:则有f(x)=(1+x2+x4+……)·(1+x)·(1+x+x2)·(x+x3+x5+……)·(1+x4+x8+……)·(1+x+x2+x3)·(1+x)·(1+x3+x6+……)。 化为有限,则有f(x)=x(1+x)2·(1+x+x2)·(1+x+x2+x3)/(1-x2) 阅读全文
posted @ 2018-08-09 18:48 Gloid 阅读(241) 评论(0) 推荐(0)
摘要: 首先有一个想法,翻转串后直接卷积看有没有0匹配上1。但这是必要而不充分的因为在原串和翻转串中?不能同时取两个值。 先有一些结论: 如果s中长度为len的前缀是border,那么其存在|s|-len的循环节(最后一段不一定完整)。 如果已知len不是s的循环节,那么显然len的因子也不是s的循环节。 阅读全文
posted @ 2018-08-09 17:52 Gloid 阅读(169) 评论(0) 推荐(0)
摘要: 设A(n)为a中n的个数,B(n)为b中n的个数。如果只考虑加法显然是一个卷积,减法翻转一下也显然是一个卷积。 问题在于两者都有。容易想到分开处理。那么可以考虑分治。即对于值域区间[l,r],分别计算A[l,mid]和B[mid+1,r]的贡献及A[mid+1,r]和B[l,mid]的贡献,然后再递 阅读全文
posted @ 2018-08-09 12:52 Gloid 阅读(294) 评论(0) 推荐(0)