HDU-4622-Reincarnation
来源:互联网 发布:淘宝旺铺基础版店招 编辑:程序博客网 时间:2024/06/07 05:14
昨天做练习的时候没有做出来,后来看到这个题要用后缀自动机做,看了下,用模板做的
代码:
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int maxn=4100;const int maxm=10010;struct suffix_automaton{ char str[maxn]; int son[maxn][26],pre[maxn],step[maxn],last,total; inline void push_back(int v) {step[++total]=v; } void Extend(int ch) {push_back(step[last]+1);int p=last,np=total;for(;p&&!son[p][ch];p=pre[p]) son[p][ch]=np;if(!p) pre[np]=1;else{ int q=son[p][ch]; if(step[q]!=step[p]+1) {push_back(step[p]+1);int nq=total;memcpy(son[nq],son[q],sizeof(son[q]));pre[nq]=pre[q];pre[q]=pre[np]=nq;for(;p&&son[p][ch]==q;p=pre[p]) son[p][ch]=nq; } elsepre[np]=q;}last=np; } void Init() {total=last=1;memset(son,0,sizeof(son));memset(pre,0,sizeof(pre));memset(step,0,sizeof(step)); } int GetAns() {int ans=0;for(int i=total;i>0;i--) ans+=step[i]-step[pre[i]];return ans; }}suf;struct Node{ int l; int r; int id; bool operator <(const Node &a)const {if(a.l==l) return r<a.r;return l<a.l; }}q[maxm];int m,ans[maxm];int main(){ int T; scanf("%d",&T); while(T--) {scanf("%s",suf.str);scanf("%d",&m);for(int i=1;i<=m;i++){ scanf("%d%d",&q[i].l,&q[i].r); q[i].l--; q[i].r--; q[i].id=i;}sort(q+1,q+m+1);suf.Init();for(int i=q[1].l;i<=q[1].r;i++) suf.Extend(suf.str[i]-'a');ans[q[1].id]=suf.GetAns();for(int i=2;i<=m;i++){ if(q[i].l!=q[i-1].l) {suf.Init();for(int j=q[i].l;j<=q[i].r;j++) suf.Extend(suf.str[j]-'a');ans[q[i].id]=suf.GetAns(); } else {if(q[i].r==q[i-1].r) ans[q[i].id]=ans[q[i-1].id];else{ for(int j=q[i-1].r+1;j<=q[i].r;j++)suf.Extend(suf.str[j]-'a'); ans[q[i].id]=suf.GetAns();} }}for(int i=1;i<=m;i++) printf("%d\n",ans[i]); } return 0;}
- HDU 4622 Reincarnation
- HDU-4622-Reincarnation
- hdu 4622Reincarnation
- HDU 4622 Reincarnation SAM
- HDU 4622 Reincarnation
- HDU 4622 Reincarnation
- HDU 4622 Reincarnation
- hdu 4622 Reincarnation
- hdu 4622 Reincarnation
- hdu 4622 Reincarnation (后缀自动机)
- hdu 4622 Reincarnation (后缀自动机)
- hdu 4622 Reincarnation(SAM)
- HDU 4622 Reincarnation 后缀自动机
- hdu 4622 Reincarnation(hash)
- hdu 4622 Reincarnation(后缀数组)
- [后缀数组+枚举] hdu 4622 Reincarnation
- hdu 4622 Reincarnation(后缀数组)
- hdu 4622 Reincarnation(后缀树组求子串个数)
- linux内核tcp的定时器管理(一)
- Android简单组件之_ImageButton_CheckBox
- CxImage
- linux内核tcp的定时器管理(二)
- 第十三章 字符串
- HDU-4622-Reincarnation
- 前端UI,javascript,css框架集合
- python 静态方法与类方法
- 第十四章 类型信息
- UVA 11076 - Add Again
- linux内核中tcp连接的断开处理
- Tomcat中文编码
- 谈30岁后it人员职业发展规划
- HDU-4632-Palindrome subsequence