bzoj4084 [Sdoi2015]bigyration题解
生活随笔
收集整理的這篇文章主要介紹了
bzoj4084 [Sdoi2015]bigyration题解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
由于bzoj沒有題面,我就yy一下題意好啦
首先這題很明顯沒有講清楚,到底是子串翻轉還是全串
然后就寫的翻轉子串,此時我們可以發現一個串可以得到它的所有排列
然后把所有字符拿出來裝在桶里hash一下,過掉了。。
下來被神犇各種D,說我這個完全是錯的。。好吧讀了下題面發現題讀錯了
然而數據太水,跑的飛起(好孩子不要學習我)
//Copyright(c)2015 liuchenrui #include<cstdio> #include<ctime> #include<iostream> #include<algorithm> #include<cstring> #include<map> #define ull unsigned long long #define H 233333333ull using namespace std; inline void splay(int &v){v=0;char c=0;int p=1;while(c<'0' || c>'9'){if(c=='-')p=-1;c=getchar();}while(c>='0' && c<='9'){v=(v<<3)+(v<<1)+c-'0';c=getchar();}v*=p; } map<ull,int> hash; ull gethash(int *s,bool isjoin){ull p=17;for(int i=0;i<=25;i++){p*=H;p+=(ull)s[i];s[i]=0;}if(isjoin){hash[p]++;return 0;}else{return (ull)hash[p];} } int lenn,lenm; char s[4000010]; int Q[30]; int n,m,las; ull ans; int main(){cin>>n>>m>>lenn>>lenm;las=lenn+lenm>>1;if(lenn+lenm&1)puts("0"),exit(0);for(int i=1;i<=n;i++){scanf("%s",s+1);for(int i=1;i<=min(las,lenn);i++)Q[s[i]-'a']++;for(int i=las+1;i<=lenn;i++)Q[s[i]-'a']--;for(int i=0;i<=25;i++)if(Q[i]<0)goto end1;gethash(Q,1);end1:;}for(int i=1;i<=m;i++){scanf("%s",s+1);for(int i=1;i<=min(las,lenm);i++)Q[s[i]-'a']++;for(int i=las+1;i<=lenm;i++)Q[s[i]-'a']--;for(int i=0;i<=25;i++)if(Q[i]<0)goto end2;ans+=(ull)gethash(Q,0);end2:;}cout<<ans<<endl;//cerr<<clock()<<endl; }總結
以上是生活随笔為你收集整理的bzoj4084 [Sdoi2015]bigyration题解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GraphQL的探索之路 – 一种为你的
- 下一篇: C# 基础语法