Coderforces 7D hash+dp

来源:互联网 发布:乐乎公寓电话 编辑:程序博客网 时间:2024/05/29 12:58

点击打开链接

题意:题意比较简单不说了

思路:用hash来判断一下到当前位置是不是回文串,利用hash来写真的是很方便,然后一个(看似)简单的DP就OK了

#include <map>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const ll INF=0x3f3f3f3f3f3f3f3fll;const int maxn=5000010;char str[maxn];ull Hash[maxn],base[maxn],p=133331,A[maxn],B[maxn];ll dp[maxn];int main(){    base[1]=1;for(int i=2;i<maxn;i++) base[i]=base[i-1]*p;    while(scanf("%s",str+1)!=-1){        int len=strlen(str+1);        A[0]=0;        for(int i=1;i<=len;i++) A[i]=A[i-1]*p+str[i]-'a'+1;        B[0]=0;        for(int i=1;i<=len;i++) B[i]=B[i-1]+(str[i]-'a'+1)*base[i];        ll ans=0;        for(int i=1;i<=len;i++){            if(A[i]==B[i]){                dp[i]=dp[i>>1]+1;                ans+=dp[i];            }        }        printf("%I64d\n",ans);    }    return 0;}

0 0
原创粉丝点击