多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > bzoj4566【HAOI2016】找相同字符

bzoj4566【HAOI2016】找相同字符

來源:程序員人生   發布時間:2016-07-22 09:24:43 閱讀次數:3015次

4566: [Haoi2016]找相同字符

Time Limit: 20 Sec  Memory Limit: 256 MB
Submit: 128  Solved: 75
[Submit][Status][Discuss]

Description

給定兩個字符串,求出在兩個字符串中各取出1個子串使得這兩個子串相同的方案數。兩個方案不同當且僅當這兩
個子串中有1個位置不同。

Input

兩行,兩個字符串s1,s2,長度分別為n1,n2。1 <=n1, n2<= 200000,字符串中只有小寫字母

Output

輸出1個整數表示答案

Sample Input

aabb
bbaa

Sample Output

10



廣義后綴自動機

建立兩個串的后綴自動機,統計1下每一個節點的兩個串出現次數sz[i][0]和sz[i][1],則答案等于∑(mx[i]-mx[fa[i]])*sz[i][0]*sz[i][1]。

另外1個小細節就是拓撲排序的地方要注意1下。




#include<cmath> #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #define F(i,j,n) for(int i=j;i<=n;i++) #define D(i,j,n) for(int i=j;i>=n;i--) #define ll long long #define N 200005 #define M 800005 using namespace std; int n,m,cnt=1,last; int fa[M],mx[M],c[M][26],sz[M][2],v[N],q[M]; ll ans; char a[N],b[N]; inline int read() { int x=0,f=1;char ch=getchar(); while (ch<'0'||ch>'9'){if (ch=='-') f=⑴;ch=getchar();} while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int d[M]; queue<int> qu; void calc() { // F(i,1,cnt) v[mx[i]]++; // F(i,1,max(n,m)) v[i]+=v[i⑴]; // F(i,1,cnt) q[v[mx[i]]--]=i; //這樣也是對的 int tmp=cnt; F(i,1,cnt) d[fa[i]]++; F(i,1,cnt) if (!d[i]) qu.push(i); while (!qu.empty()) { int x=qu.front();qu.pop(); q[tmp--]=x;d[fa[x]]--; if (!d[fa[x]]) qu.push(fa[x]); } D(i,cnt,1) { sz[fa[q[i]]][0]+=sz[q[i]][0]; sz[fa[q[i]]][1]+=sz[q[i]][1]; } F(i,1,cnt) ans+=(ll)(mx[i]-mx[fa[i]])*sz[i][0]*sz[i][1]; } void add(int x) { int p=last; if (c[p][x]&&mx[c[p][x]]==mx[p]+1){last=c[p][x];return;} int np=++cnt;last=np; mx[np]=mx[p]+1; while (p&&!c[p][x]) c[p][x]=np,p=fa[p]; if (!p) fa[np]=1; else { int q=c[p][x]; if (mx[q]==mx[p]+1) fa[np]=q; else { int nq=++cnt; mx[nq]=mx[p]+1; memcpy(c[nq],c[q],sizeof(c[q])); fa[nq]=fa[q];fa[q]=fa[np]=nq; while (p&&c[p][x]==q) c[p][x]=nq,p=fa[p]; } } } int main() { scanf("%s",a+1);scanf("%s",b+1); n=strlen(a+1);m=strlen(b+1); last=1;F(i,1,n) add(a[i]-'a'),sz[last][0]++; last=1;F(i,1,m) add(b[i]-'a'),sz[last][1]++; calc(); cout<<ans<<endl; return 0; }


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 在线黄视频网站 | 国产精品视频自拍 | 精品一区亚洲 | 免费观看又污又黄网站日本 | 国内精品久久国产大陆 | 久久er国产精品免费观看8 | 男人天堂亚洲天堂 | 禁视频网站在线观看漫画 | 日本香蕉视频 | 级毛片久久久毛片精品毛片 | 欧美最刺激好看的一级毛片 | 国产成人福利在线 | 天堂亚洲 | 免费在线公开视频 | 另类欧美视频 | 久久精品国产免费 | 尤物视频在线播放 | 三级国产在线观看 | 自由成熟的性色视频免费观看 | 国产毛片久久久久久国产毛片 | 日本一区二区三区在线观看视频 | 免费一级毛片在播放视频 | 精品视频在线观看一区二区三区 | 国产精品福利在线观看 | 欧美成人看片一区二区三区尤物 | 一区二区三区高清 | 456亚洲人成影视在线观看 | 波多野结衣中文字幕一区二区三区 | 亚洲国产日韩在线观频 | xxxx hd极品| 亚洲乱码一区二区三区在线观看 | 一级淫片免费视频 | 免费观看无遮挡www的视频 | 免费女人18毛片a级毛片视频 | 日本在线视频一区二区三区 | 人善交zzzxxx另类 | 成人自拍视频在线 | 亚洲视频2| 欧美一级高清片在线 | 一区二区三区在线 | 性欧美另类老妇高清 |