【bzoj3160】万径人踪灭 FFT】的更多相关文章

Solution $ans=$回文子序列$-$回文子串的数目. 后者可以用$manacher$直接求. 前者设$f[i]$表示以$i$为中心的对称的字母对数. 那么回文子序列的数量也就是$\sum_{i=0}^{n-1}2^{f[i]-1}$ 构造两个数组$a[i],b[i]$.若第$i$位为$a$,那么$a[i]=1$,否则$b[i]=1$. 可以发现$a$数组自身卷积就是$a$字母对$f$数组的贡献,$b$数组同理. 卷下$a$,卷下$b$,对应位置求和,就是$f$数组. 因为在卷积中每对对…
原文链接http://www.cnblogs.com/zhouzhendong/p/8810140.html 题目传送门 - BZOJ3160 题意 给你一个只含$a,b$的字符串,让你选择一个子序列,使得: $1.$位置和字符都关于某一条对称轴对称. $2.$不能是连续的一段. 问原来的字符串中能找出多少个这样的子序列.答案对$10^9+7$取模. 串长$\leq 10^5$. 题解 下面的讨论都在满足条件$1$的情况下进行. 首先,我们先不考虑条件$2$.然后再减掉不满足条件$2$的就可以了…
题目: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…
容易想到先统计回文串数量,这样就去掉了不连续的限制,变为统计回文序列数量. 显然以某个位置为对称轴的回文序列数量就是2其两边(包括自身)对称相等的位置数量-1.对称有啥性质?位置和相等.这不就是卷积嘛.那么就做完了. 又写挂manacher,没救. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<…
题解 此题略神QAQ orz po神牛 由题我们知道我们要求出: 回文子序列数 - 连续回文子串数 我们记为ans1和ans2 ans2可以用马拉车轻松解出,这里就不赘述了 问题是ans1 我们设\(f[i]\)表示以i位置为中心的对称的字符对数,那么i位置产生的回文子序列数 = \(2^{f[i]} - 1\) 如何求? 由对称的性质,以i为对称中心的两点\(a,b\)满足\(a+b=2*i\) 我们可以设一个这样的序列: \(c[n]\)表示以\(n/2\)位置为对称点的对称点对数[n/2若…
BZOJ传送门: 解题思路: FFT在处理卷积时可以将自己与自己卷,在某一种字母上标1其他标0,做字符集次就好了. (回文就是直接对称可以联系偶函数定义理解,根据这个性质就可以将字符串反向实现字符串匹配). 最后利用容斥回文字符2的次幂-回文串就好了. 回文串计数当然要回文自动机了. 代码: #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> typedef long…
万径人踪灭 bzoj-3160 题目大意:给定一个ab串.求所有的子序列满足:位置和字符都关于某条对称轴对称而且不连续. 注释:$1\le n\le 10^5$. 想法: 看了大爷的题解,OrzOrz. 因为对称轴可以是两个字符中间的位置,所以我们把字符串按照$Manacher$的形式倍增. 我们希望处理出一个数组$f$,$f_i$表示以$i$为对称轴的左右相等字符个数. 以当前位置为对称轴的答案显然就是$2^{f_i}-1$. 因为还有不连续的条件,我们只需要减掉$Manacher$的回文半径…
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 <…
万径人踪灭 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1936  Solved: 1076[Submit][Status][Discuss] Description Input Output   Sample Input   Sample Output   HINT 题目大意:给定一个由'a'和'b'构成的字符串,求不连续回文子序列的个数 首先回文一定是将字符串倍增 由于求的是不连续回文子序列的个数 因此我们可以求出总回文子序列的个数,然后减…
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[…