设a[i]=bool(s[i]=='a'),b[i]=bool(s[i]=='b'),考虑a和a.b和b的卷积,由于卷积是对称的,就可以统计出不连续回文子串个数了.可能说得比较简略.再用manacher算出连续回文子串个数并减去. FFT比FNT(NTT)快了3倍= = #include<bits/stdc++.h> #define R f[i] #define N (1<<18) using namespace std; int f[N],i,j,k,n,m,v[N]; long…
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3160 我是一个傻叉 微笑脸 #include<bits/stdc++.h> #define inf 1000000000 #define ll long long #define N 200005 #define mod 1000000007 using namespace std; int read(){ ,f=;char ch=getchar(); ;ch=getchar();} +c…
fft+manacher fft都快忘了... 其实我们发现,这个问题是可以用fft做的,因为是回文子序列,所以我们直接自己和自己求卷积,然后扫描每个位置,注意是每个位置,因为包括奇数长度和偶数长度,f[i]为第i个位置上的对称字符的数量,那么一共就有(2^f[i])-1个回文子序列,因为是要不连续的,所以用manacher求出连续的就行了 #include<bits/stdc++.h> using namespace std; typedef long long ll; , mod = ;…