日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bzoj4084【SDOI2015】bigyration

發(fā)布時(shí)間:2023/12/8 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bzoj4084【SDOI2015】bigyration 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.





感覺字符串題的做法都好神奇…以后一定要優(yōu)先考慮哈希

假設(shè)S是長(zhǎng)度較長(zhǎng)的集合。

將T中的串哈希,用map記錄每個(gè)哈希值出現(xiàn)了多少次。

然后枚舉S串,在map中找可以拼接的T串的個(gè)數(shù)。




#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> #include<map> #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 ull unsigned long long #define maxn 4000005 #define base 233 using namespace std; int n,m,len1,len2; ull p[maxn],f[maxn]; ll ans; string s[maxn],t[maxn]; map<ll,int> mp; inline ull hash(int l,int r) {if (l>r) return 0;return f[r]-f[l-1]*p[r-l+1]; } int main() {scanf("%d%d%d%d",&n,&m,&len1,&len2);p[0]=1;F(i,1,len1+len2) p[i]=p[i-1]*base;int mid=(len1+len2)>>1;if (len1<len2){F(i,1,n) cin>>t[i];F(i,1,m) cin>>s[i];swap(n,m);swap(len1,len2);}else{F(i,1,n) cin>>s[i];F(i,1,m) cin>>t[i];}F(i,1,m){ull h=0;F(j,0,len2-1) h=h*base+t[i][j]-'a'+1;mp[h]++;}F(i,1,n){F(j,0,mid*2-1) f[j+1]=f[j]*base+s[i][j%mid]-'a'+1;ull h=0;F(j,mid,len1-1) h=h*base+s[i][j]-'a'+1;F(j,1,mid) if (hash(j,j+len1-mid-1)==h) ans+=mp[hash(j+len1-mid,j+mid-1)];}printf("%lld\n",ans); }

總結(jié)

以上是生活随笔為你收集整理的bzoj4084【SDOI2015】bigyration的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。