bzoj 3160 万径人踪灭 FFT】的更多相关文章

BZOJ 3160: 万径人踪灭 题目传送门 [题目大意] 给定一个长度为n的01串,求有多少个回文子序列? 回文子序列是指从原串中找出任意个,使得构成一个回文串,并且位置也是沿某一对称轴对称. 假如x是对称轴,若 i 和 j 是对称且di=dj,i,j可以视为可行的一组.可行组数记为f[x]. \(f[x]=\sum_{i=1}^{x-1}[d[x-i]==d[x+i]]\) 以x为对称轴的答案是2^(f[x])-1. 可以观察发现将d[i]=1的A[i]标为1,A与A做一次卷积,即可得出d[…
3160: 万径人踪灭 题意:求一个序列有多少不连续的回文子序列 一开始zz了直接用\(2^{r_i}-1\) 总-回文子串 后者用manacher处理 前者,考虑回文有两种对称形式(以元素/缝隙作为对称轴) f[i],i为奇数表示以缝隙对称,偶数表示以元素i>>1对称,对答案的贡献就是\(2^{f[i]}-1\) \[ f[i] = \sum_{j=1}^{i-1} [s_j = s_{i-j}] \] 就是裸卷积 因为只有a,b两个字符,可以先后令a或b=1分别求 #include <…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3160 似乎理解加深了. 用卷积算相同的位置:先把 a 赋成1. b 赋成0,卷积一遍:再把 a 赋成0. b 赋成1,卷积一遍:两个加起来就有了每个位置的值,它表示以该位置/2(/2的位置可以是裂缝)为对称轴的回文位置个数. 然后用马拉车把连续区间的情况去掉. 注意一下单个元素也要算上,因为有那种奇数的:马拉车里别忘了把单个元素减去. 因为FFT的两个数组是一样的,所以FFT一次,然后自己…
万径人踪灭 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1936  Solved: 1076[Submit][Status][Discuss] Description Input Output   Sample Input   Sample Output   HINT 题目大意:给定一个由'a'和'b'构成的字符串,求不连续回文子序列的个数 首先回文一定是将字符串倍增 由于求的是不连续回文子序列的个数 因此我们可以求出总回文子序列的个数,然后减…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3160 求出关于一个位置有多少对对称字母,如果 i 位置有 f[i] 对,对答案的贡献是 2^f[i] - 1: 然后减去连续的,用 manachar 求出回文长度,每个位置作为边界都是一种不合法情况: 求对称,首先把字符串中间穿插字符 '$',于是字符串的长度变成2倍: 考虑一对字母 s[x],s[y],如果 s[x] = s[y],其对称中心是 (x+y)/2: 放在加入字符后的字符串中…
3160: 万径人踪灭 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 133  Solved: 80[Submit][Status][Discuss] Description Input Output   Sample Input   Sample Output   HINT 以每一个位置为中心,分别处理连续一块的回文串,回文序列个数. 比较容易看出是FFT+manachar,但是FFT还是不太熟悉,特别要注意三层for语句中i,j,k不能写错,…
[题意]给定只含'a'和'b'字符串S,求不全连续的回文子序列数.n<=10^5. [算法]FFT+回文串 [题解]不全连续的回文子序列数=回文子序列总数-回文子串数. 回文子串数可以用回文串算法(Manacher,PAM,二分+hash)轻松计算. 设f[i]表示以i为对称中心的对称字符对数,那么 i 对答案的贡献是$2^{f[i]}-1$,同时容易列出f[i]的计算公式: $$f[i]=\sum_{j=0}^{i}[S_j=S_{2i-j}]$$ 令a=0,b=1,那么有: $$f[i]=\…
考虑正难则反,我们计算所有对称子序列个数,再减去连续的 这里减去连续的很简单,manacher即可 然后考虑总的,注意到关于一个中心对称的两点下标和相同(这样也能包含以空位为对称中心的方案),所以设f[i]为下标和为i的对称中心一共有多少对相同字符,这样总答案就是\( \sum_{i=0}^{2*n-2}2^{f[i]}-1 \)(减掉的1是减掉空集) 然后考虑f怎么求,\( f[i]=((\sum_{j=0}^{i-1}s[j]==s[i-j])+1)/2 \),除2是因为每一对都被算了两遍…
Description 一个ab串,问有多少回文子序列,字母和位置都对称,并且不连续. Sol FFT+Manacher. 不连续只需要减去连续的就可以了,连续的可以直接Manacher算出来. 其他全部对称的回文子序列就可以用生成函数那样FFT搞出来,把ab分开考虑就行. 有挺多细节的...包括下标运算什么什么的... Code /************************************************************** Problem: 3160 User:…
这个题感觉很神呀.将 FFT 和 Manacher 有机结合在了一起. 首先我们不管那个 “不能连续” 的条件,那么我们就可以求出有多少对字母关于某一条直线对称,然后记 $T_i$ 为关于直线 $i$ 对称的字母对的数量,那么答案(暂记为 $Ans$)就会是: $$Ans = \sum 2^{T_i}-1$$ 在不管那个 “不能连续” 的条件的时候,这个应该是显然的. 怎么算的话,我们弄两次.分别把 $a$ 和 $b$ 当做 $1$,另一个当做 $0$,然后就可以得到一个多项式,将这个多项式平方…