HDU 4622 后缀自动机
来源:互联网 发布:广州锐博生物知乎 编辑:程序博客网 时间:2024/05/22 12:21
Reincarnation
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 2009 Accepted Submission(s): 680
Problem Description
Now you are back,and have a task to do:
Given you a string s consist of lower-case English letters only,denote f(s) as the number of distinct sub-string of s.
And you have some query,each time you should calculate f(s[l...r]), s[l...r] means the sub-string of s start from l end at r.
Given you a string s consist of lower-case English letters only,denote f(s) as the number of distinct sub-string of s.
And you have some query,each time you should calculate f(s[l...r]), s[l...r] means the sub-string of s start from l end at r.
Input
The first line contains integer T(1<=T<=5), denote the number of the test cases.
For each test cases,the first line contains a string s(1 <= length of s <= 2000).
Denote the length of s by n.
The second line contains an integer Q(1 <= Q <= 10000),denote the number of queries.
Then Q lines follows,each lines contains two integer l, r(1 <= l <= r <= n), denote a query.
For each test cases,the first line contains a string s(1 <= length of s <= 2000).
Denote the length of s by n.
The second line contains an integer Q(1 <= Q <= 10000),denote the number of queries.
Then Q lines follows,each lines contains two integer l, r(1 <= l <= r <= n), denote a query.
Output
For each test cases,for each query,print the answer in one line.
Sample Input
2bbaba53 42 22 52 41 4baaba53 33 41 43 55 5
Sample Output
3175813851HintI won't do anything against hash because I am nice.Of course this problem has a solution that don't rely on hash.
Source
2013 Multi-University Training Contest 3
给定一个长度为2000的字符串,访问任意一区间不同字串个数。
构造2000次后缀自动机,然后把结果预处理,O(1)回答。
第一次照着写,模糊的理解了一点。
代码:
/* ***********************************************Author :rabbitCreated Time :2014/7/26 22:53:41File Name :6.cpp************************************************ */#pragma comment(linker, "/STACK:102400000,102400000")#include <stdio.h>#include <iostream>#include <algorithm>#include <sstream>#include <stdlib.h>#include <string.h>#include <limits.h>#include <string>#include <time.h>#include <math.h>#include <queue>#include <stack>#include <set>#include <map>using namespace std;#define INF 0x3f3f3f3f#define eps 1e-8#define pi acos(-1.0)typedef long long ll;const int CHAR=26;const int MAXN=2200;struct SAM_Node{SAM_Node *fa,*next[CHAR];int len;int id,pos;SAM_Node(){}SAM_Node(int _len){fa=0;len=_len;memset(next,0,sizeof(next));}};SAM_Node SAM_node[MAXN*2],*SAM_root,*SAM_last;int SAM_size;SAM_Node *newSAM_Node(int len){SAM_node[SAM_size]=SAM_Node(len);SAM_node[SAM_size].id=SAM_size;return &SAM_node[SAM_size++];}SAM_Node *newSAM_Node(SAM_Node *p){SAM_node[SAM_size]=*p;SAM_node[SAM_size].id=SAM_size;return &SAM_node[SAM_size++];}void SAM_init(){SAM_size=0;SAM_root=SAM_last=newSAM_Node(0);SAM_node[0].pos=0;}void SAM_add(int x,int len){SAM_Node *p=SAM_last,*np=newSAM_Node(p->len+1);np->pos=len;SAM_last=np;for(;p&&!p->next[x];p=p->fa)p->next[x]=np;if(!p){np->fa=SAM_root;return;}SAM_Node *q=p->next[x];if(q->len==p->len+1){np->fa=q;return;}SAM_Node *nq=newSAM_Node(q);nq->len=p->len+1;q->fa=nq;np->fa=nq;for(;p&&p->next[x]==q;p=p->fa)p->next[x]=nq;}void SAM_build(char *s){SAM_init();int len=strlen(s);for(int i=0;i<len;i++)SAM_add(s[i]-'a',i+1);}int Q[3000][3000];char str[3000];int main(){ //freopen("data.in","r",stdin); //freopen("data.out","w",stdout); int T; scanf("%d",&T); while(T--){ scanf("%s",str); int n=strlen(str); memset(Q,0,sizeof(Q)); for(int i=0;i<n;i++){ SAM_init(); for(int j=i;j<n;j++) SAM_add(str[j]-'a',j-i+1); for(int j=1;j<SAM_size;j++) Q[i][SAM_node[j].pos-1+i]+=SAM_node[j].len-SAM_node[j].fa->len; for(int j=i+1;j<n;j++)Q[i][j]+=Q[i][j-1]; } int M; scanf("%d",&M); while(M--){ int u,v; scanf("%d%d",&u,&v); u--;v--; printf("%d\n",Q[u][v]); } } return 0;}
0 0
- hdu 4622(后缀自动机)
- HDU 4622 后缀自动机
- HDU 4622 后缀自动机
- hdu 4622 Reincarnation (后缀自动机)
- hdu 4622 Reincarnation (后缀自动机)
- HDU 4622(后缀自动机)
- HDU 4622 Reincarnation 后缀自动机
- hdu 4622(后缀自动机|后缀数组)
- Hdu 4622 Reincarnation 后缀数组/后缀自动机
- HDU 4622 Reincarnation(后缀自动机)
- hdu 4622 Reincarnation(后缀数组|后缀自动机|KMP)
- HDU 4622 Reincarnation 后缀数组 或 后缀自动机
- hdu 4622 后缀数组计数问题||后缀自动机
- hdu 4436 str2int (后缀自动机)
- HDU 4270 SAM 后缀自动机
- HDU 4436 str2int【后缀自动机】
- HDU 4436(后缀自动机)
- 后缀自动机1003 HDU 4416
- Constructing Roads+最小生成树模板题+hdu
- 黑马程序员_银行业务调度系统
- 关系数据库的末日是否已经来临
- HDU4135 (求a~b内与n互素的数的个数) 容斥原理
- VC++6.0快捷键
- HDU 4622 后缀自动机
- asdasdf asdf
- springmvc的简单工作流程与三种controller简单描述
- Java重写(覆盖)、重载、过载
- 解释器模式分析、结构图及基本代码
- Android开发学习-8__图解
- VC++6.0编译时出现fatal error C1010: unexpected end of file while looking for precompiled header directiv
- 对SQL说不!NoSQL的数据库技术革命
- C语言函数调用约定-stdcall&cdecl&thiscall