日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

bzoj4566【HAOI2016】找相同字符

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

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; }


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产视频观看 | 欧美一区二区三区 | 国产一区二区久久久 | 中文日产幕无线码一二三四区 | 最近中文字幕高清字幕mv | 国产不卡在线视频 | 亚洲国产精品久久久久久久久久 | 国产亚洲综合性久久久影院 | 久艹福利 | 能在线看的av | 色婷婷一区二区三区四区成人网 | www.色综合 | 欧美在线三级 | 日韩一区免费 | 九一毛片 | 中文字幕 国产 | 久久99精品久久久久久琪琪 | 久久九九国产精品 | 成人免费视频网站在线看 | 国产精品久久久久国产a级 在线观看av网站 | 欧美一区久久 | aⅴ一级片 | 天堂аⅴ在线最新版在线 | 精品久久久久久久久久中出 | 亚洲高清视频在线 | 国产精品第100页 | 欧美一区二区在线视频 | 欧美日韩精品一区二区三区蜜桃 | 青青草免费在线视频播放 | 欧美日韩国产在线观看 | a√毛片| 国产精品毛片一区二区三区 | 国产乱码一区二区三区 | 久久99精品久久久久久青青日本 | 热re99久久精品国产99热 | 可以直接在线观看的av | 午夜性刺激免费看视频 | 国产呦精品一区二区三区网站 | 日韩午夜精品 | 国产黄色片在线观看 | 亚洲一区在线免费观看 |