fzu 2137 奇异字符串

来源:互联网 发布:网络舆情监控的目的 编辑:程序博客网 时间:2024/06/10 16:15

hash大法,还不懂为什么要这要做,但是就是可以这样做,先当模板,类似问题可以套用。


#include"cstdio"#include"cstring"#include"cmath"#include"cstdlib"#include"iostream"#include"algorithm"using namespace std;typedef unsigned long long ll;const ll maxn=100100;ll hash[maxn],base[maxn];char s[maxn];void init(ll len){    ll seed=131;    hash[0]=0;base[0]=1;    for(ll i=1;i<=len;i++){        hash[i]=hash[i-1]*seed+s[i];        base[i]=base[i-1]*seed;    }}ll gethash(ll L,ll R){    return hash[R]-hash[L-1]*base[R-L+1];}int main(){     int T;     cin>>T;     while(T--){         scanf("%s",s+1);         ll len=strlen(s+1);         init(len);         ll ans=0;         for(ll i=2;i<len;i++){             ll L=i-1,R=i+1;             while(L>=1&&R<=len){                 if(s[L]==s[i]||s[R]==s[i])break;                 if(gethash(L,i-1)==gethash(i+1,R))                     ans+=(ll)(2*(i-L)+1)*(2*(i-L)+1);                 L--;R++;             }         }         printf("%I64u\n",ans);     }     return 0;}


0 0
原创粉丝点击