【bzoj3160】万径人踪灭 FFT
题目: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(){
- int x=,f=;char ch=getchar();
- while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
- while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
- return x*f;
- }
- struct CD{
- double x,y;
- CD(double a=,double b=){x=a;y=b;}
- friend CD operator + (CD n1,CD n2){return CD(n1.x+n2.x,n1.y+n2.y);}
- friend CD operator - (CD n1,CD n2){return CD(n1.x-n2.x,n1.y-n2.y);}
- friend CD operator * (CD n1,CD n2){return CD(n1.x*n2.x-n1.y*n2.y,n1.x*n2.y+n1.y*n2.x);}
- };
- const double Pi=acos(-1.0);
- int bit,n,nn,ans,m,mx,id,p[N<<];
- char s[N],st[N<<];
- CD a[N<<],b[N<<];
- void FFT(CD *a,int n,int type){
- for(int i=,j=;i<n;i++) {
- if(j>i)swap(a[i],a[j]);
- int k=n;
- while(j&(k >>= ))j&=~k;
- j|=k;
- }
- for(int i=;i<=bit;i++){
- CD w_n(cos(*type*Pi/(<<i)),sin(*type*Pi/(<<i)));
- for(int j=;j<n;j+=(<<i)){
- CD w(,);
- for(int k=j;k<j+(<<(i-));k++){
- CD tmp=a[k],tt=w*a[k+(<<(i-))];
- a[k]=tmp+tt;
- a[k+(<<(i-))]=tmp-tt;
- w=w*w_n;
- }
- }
- }
- if(type<)for(int i=;i<n;i++)a[i].x/=n;
- }
- int main(){
- scanf("%s",s);
- n=strlen(s);nn=n;
- bit=;
- while((<<bit)<(n<<))bit++;
- n=<<bit;
- for(int i=nn;i<n;i++)a[i]=b[i]=CD(,);
- for(int i=;i<nn;i++)if(s[i]=='a')a[i]=CD(,);
- FFT(a,n,);
- for(int i=;i<n;i++)a[i]=a[i]*a[i];
- FFT(a,n,-);
- for(int i=;i<nn;i++)if(s[i]=='b')b[i]=CD(,);
- FFT(b,n,);
- for(int i=;i<n;i++)b[i]=b[i]*b[i];
- FFT(b,n,-);
- for(int i=;i<n;i++){
- int x=round(a[i].x+b[i].x);
- x=(x+)/;
- ans=(ans+(<<x)-)%mod;
- }
- m=nn<<|;
- for(int i=;i<nn;i++)st[(i+)<<]=s[i];
- mx=id=;
- for(int i=;i<=m;i++){
- if(mx>i)p[i]=min(p[*id-i],mx-i);else p[i]=;
- while(i-p[i]->&&i+p[i]+<=m&&st[i-p[i]-]==st[i+p[i]+])p[i]++;
- if(i+p[i]>mx)mx=i+p[i],id=i;
- ans=((ans-(p[i]+)/)%mod+mod)%mod;
- }
- printf("%d\n",ans);
- return ;
- }
【bzoj3160】万径人踪灭 FFT的更多相关文章
- BZOJ3160:万径人踪灭(FFT,Manacher)
Solution $ans=$回文子序列$-$回文子串的数目. 后者可以用$manacher$直接求. 前者设$f[i]$表示以$i$为中心的对称的字母对数. 那么回文子序列的数量也就是$\sum_{ ...
- BZOJ3160 万径人踪灭 字符串 多项式 Manachar FFT
原文链接http://www.cnblogs.com/zhouzhendong/p/8810140.html 题目传送门 - BZOJ3160 题意 给你一个只含$a,b$的字符串,让你选择一个子序列 ...
- BZOJ3160 万径人踪灭(FFT+manacher)
容易想到先统计回文串数量,这样就去掉了不连续的限制,变为统计回文序列数量. 显然以某个位置为对称轴的回文序列数量就是2其两边(包括自身)对称相等的位置数量-1.对称有啥性质?位置和相等.这不就是卷积嘛 ...
- BZOJ3160 万径人踪灭 【fft + manacher】
题解 此题略神QAQ orz po神牛 由题我们知道我们要求出: 回文子序列数 - 连续回文子串数 我们记为ans1和ans2 ans2可以用马拉车轻松解出,这里就不赘述了 问题是ans1 我们设\( ...
- BZOJ3160: 万径人踪灭(FFT,回文自动机)
BZOJ传送门: 解题思路: FFT在处理卷积时可以将自己与自己卷,在某一种字母上标1其他标0,做字符集次就好了. (回文就是直接对称可以联系偶函数定义理解,根据这个性质就可以将字符串反向实现字符串匹 ...
- [bzoj3160]万径人踪灭_FFT_Manacher
万径人踪灭 bzoj-3160 题目大意:给定一个ab串.求所有的子序列满足:位置和字符都关于某条对称轴对称而且不连续. 注释:$1\le n\le 10^5$. 想法: 看了大爷的题解,OrzOrz ...
- BZOJ 3160: 万径人踪灭 [fft manacher]
3160: 万径人踪灭 题意:求一个序列有多少不连续的回文子序列 一开始zz了直接用\(2^{r_i}-1\) 总-回文子串 后者用manacher处理 前者,考虑回文有两种对称形式(以元素/缝隙作为 ...
- bzoj 3160 万径人踪灭 FFT
万径人踪灭 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1936 Solved: 1076[Submit][Status][Discuss] De ...
- BZOJ 3160: 万径人踪灭 FFT+快速幂+manacher
BZOJ 3160: 万径人踪灭 题目传送门 [题目大意] 给定一个长度为n的01串,求有多少个回文子序列? 回文子序列是指从原串中找出任意个,使得构成一个回文串,并且位置也是沿某一对称轴对称. 假如 ...
随机推荐
- poj 1611:The Suspects(并查集,经典题)
The Suspects Time Limit: 1000MS Memory Limit: 20000K Total Submissions: 21472 Accepted: 10393 De ...
- <转>Java 常用排序算法小记
排序算法很多地方都会用到,近期又重新看了一遍算法,并自己简单地实现了一遍,特此记录下来,为以后复习留点材料. 废话不多说,下面逐一看看经典的排序算法: 1. 选择排序 选择排序的基本思想是遍历数组的过 ...
- jQuery.fn.extend与jQuery.extend到底区别在哪?
正文: 其实说白了,从两个方法本身就能看出来端倪. 我们先把jQuery看成了一个类,这样好理解一些. jQuery.extend(),是扩展的jQuery这个类. 假设我们把jQuery这个类看成是 ...
- 在Visualforce page中用自带的控件实现Ajax回调后台方法(并且可以用js去动态给parameters赋值)
这里用的组合是:apex:commandLink + apex:actionFunction + apex:outputPanel 这里的 apex:commandLink 和 apex:actio ...
- java线程之——synchronized的注意细节
我在学习synchronized的时候,十分好奇当一个线程进入了一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 然后就做了个实验(实验代码最后贴出),最后得到了如下 ...
- strcmp函数的使用
Action() { /********************************* * Author:旺仔 * object:strcmp * date:2015-12-09 ...
- 单机c1000k连接
单机c1000k连接即单机实现百万连接,首先要注意的是连接是虚拟的逻辑的,连接最终落于 网卡,清晰概念才能更深入更清晰的想出问题的解决办法. 参考 http://www.ideawu.net/blog ...
- PHP 自带查询运行内存的函数
memory_get_usage - 返回分配给 PHP 的内存量 int memory_get_usage ([ bool $real_usage = false ] ) 返回当前分配给你的 PHP ...
- 【转】linux network namespace 学习
原文地址:https://segmentfault.com/a/1190000004059167 介绍 在专业的网络世界中,经常使用到Virtual Routing and Forwarding(VR ...
- iOS NSDate获取当前时间并格式化
NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; [formatter setDateFormat:@"yyyy-MM- ...