Codeforces Beta Round #7 D. Palindrome Degree —— hash

来源:互联网 发布:刀锋洗眼 知乎 编辑:程序博客网 时间:2024/05/17 01:53

题目链接:http://codeforces.com/contest/7/problem/D


D. Palindrome Degree
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

String s of length n is called k-palindrome, if it is a palindrome itself, and its prefix and suffix of length  are (k - 1)-palindromes. By definition, any string (even empty) is 0-palindrome.

Let's call the palindrome degree of string s such a maximum number k, for which s is k-palindrome. For example, "abaaba" has degree equals to 3.

You are given a string. Your task is to find the sum of the palindrome degrees of all its prefixes.

Input

The first line of the input data contains a non-empty string, consisting of Latin letters and digits. The length of the string does not exceed 5·106. The string is case-sensitive.

Output

Output the only number — the sum of the polindrome degrees of all the string's prefixes.

Examples
input
a2A
output
1
input
abacaba
output
6




代码如下:

#include<bits/stdc++.h>using namespace std;typedef long long LL;const double eps = 1e-6;const int INF = 2e9;const LL LNF = 9e18;const int mod = 1e9+7;const int maxn = 5e6+10;char s[maxn];int dp[maxn];int main(){    scanf("%s",s+1);    int l = 0, r = 0, m = 1;    for(int i = 1; s[i]; i++)    {        l = l*137+s[i];        r = r+s[i]*m, m *= 137;        if(l==r)            dp[i] = dp[i/2]+1;    }    int ans = 0;    for(int i = 1; s[i]; i++)        ans += dp[i];    printf("%d\n",ans);}


原创粉丝点击