标签:
Palindromes and Super Abilities 2
Time Limit: 500MS Memory Limit: 102400KB 64bit IO Format: %I64d & %I64u
Description
Input
Output
Source
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn = 5000010; 4 struct PalindromicTree{ 5 struct node{ 6 int son[2],f,len; 7 void init(int len){ 8 memset(son,0,sizeof son); 9 this->len = len; 10 } 11 }e[maxn]; 12 int tot,last,n; 13 char s[maxn]; 14 int newnode(int len = 0){ 15 e[tot].init(len); 16 return tot++; 17 } 18 int getFail(int x){ 19 while(s[n - e[x].len - 1] != s[n]) x = e[x].f; 20 return x; 21 } 22 void init(){ 23 last = tot = n = 0; 24 newnode(0); 25 newnode(-1); 26 e[0].f = 1; 27 s[n] = -1; 28 } 29 bool extend(int c){ 30 s[++n] = c; 31 int cur = getFail(last); 32 bool isExtend = e[cur].son[c] == 0; 33 if(!e[cur].son[c]){ 34 int newson = newnode(e[cur].len + 2); 35 e[newson].f = e[getFail(e[cur].f)].son[c]; 36 e[cur].son[c] = newson; 37 } 38 last = e[cur].son[c]; 39 return isExtend; 40 } 41 }pt; 42 char str[maxn]; 43 int main(){ 44 while(gets(str)){ 45 pt.init(); 46 for(int i = 0; str[i]; ++i){ 47 if(pt.extend(str[i] - ‘a‘)) putchar(‘1‘); 48 else putchar(‘0‘); 49 } 50 putchar(‘\n‘); 51 } 52 return 0; 53 }
URAL 2040 Palindromes and Super Abilities 2
标签:
原文地址:http://www.cnblogs.com/crackpotisback/p/4913873.html