URAL 2040 (回文自动机)
2016-08-07 22:02
260 查看
Problem Palindromes and Super Abilities 2 (URAL2040)
题目大意
给一个字符串,从左到右依次添加,询问每添加一个字符,新增加的回文串数量。
解题分析
用回文自动机来做,如果新添加了一个字符,自动机中新开了一个节点,说明新增加了一个回文串。
对于每新添加一个字符,新增加的回文串数量最多为1。
另外,这道题既卡空间又卡时间,交了n发才过。
参考程序
View Code
题目大意
给一个字符串,从左到右依次添加,询问每添加一个字符,新增加的回文串数量。
解题分析
用回文自动机来做,如果新添加了一个字符,自动机中新开了一个节点,说明新增加了一个回文串。
对于每新添加一个字符,新增加的回文串数量最多为1。
另外,这道题既卡空间又卡时间,交了n发才过。
参考程序
#include <map> #include <set> #include <stack> #include <queue> #include <cmath> #include <ctime> #include <string> #include <vector> #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> #pragma comment(linker,"/STACK:102400000,102400000") using namespace std; #define N 5000008 #define V 1008 #define E 60008 #define lson l,m,rt<<1 #define rson m,r+1,rt<<1|1 #define clr(x,v) memset(x,v,sizeof(x)); #define LL long long const int mo = 1000000007; const int inf = 0x3f3f3f3f; const int INF = 2000000000; /**************************************************************************/ int n,cnt,last; int nt [2],size ,len ,fail ; char s ; void init(){ fail[0]=fail[1]=1; len[1]=-1; last=0; cnt=1; } void insert(int c,int n){ int p=last; while (s[n-len[p]-1]!=s ) p=fail[p]; if (!nt[p][c]){ int now=++cnt,k=fail[p]; len[now]=len[p]+2; while (s[n-len[k]-1]!=s ) k=fail[k]; fail[now]=nt[k][c]; nt[p][c]=now; putchar('1'); } else putchar("0"); last=nt[p][c]; size[last]++; } void solve(){ for (int i=cnt;i>=1;i--) size[fail[i]]+=size[i]; } int main(){ gets(s+1); init(); n=strlen(s+1); for (int i=1;i<=n;i++) insert(s[i]-97,i); }
View Code
相关文章推荐
- URAL 2040 Palindromes and Super Abilities 2 (回文自动机)
- Ural 2040 Palindromes and Super Abilities 2 回文自动机
- 【回文自动机】ural2040
- URAL 2059 Not common palindromes 回文自动机
- 【后缀回文自动机】 URAL 1960 Palindromes and Super Abilities
- 回文树(回文自动机) - URAL 1960 Palindromes and Super Abilities
- 回文树(回文自动机) - URAL 1960 Palindromes and Super Abilities
- URAL 2040 Palindromes and Super Abilities 2(回文树)
- URAL 2040 Palindromes and Super Abilities 2(回文树)
- URAL - 1960 Palindromes and Super Abilities 回文自动机
- 回文树/回文自动机 引入
- bzoj 4044: Virus synthesis 回文自动机
- [回文自动机 Manacher] BZOJ4166: 月宫的符卡序列
- BZOJ3676:[Apio2014]回文串(回文自动机)
- URAL 2037 Richness of binary words (回文子串,找规律)
- BZOJ3676【回文自动机】
- 【后缀数组】【最长回文子串】Palindrome Ural_1297
- 回文自动机
- URAL 1297 后缀数组:求最长回文子串
- ural1297 Palindrome,hdu 3068 最长回文,Manacher