思路倒是不难,但是这题卡常啊 ~

code:

#include <bits/stdc++.h>
#define N 2000004
#define M 1000005
#define SIZE 2000005
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
vector<int>G[SIZE];
int n,m,tim,cnt,tot;
char str[SIZE],tmp[SIZE],t1[SIZE],t2[SIZE];
int st[N],ed[N],dfn[N],ch[SIZE][26],ba[SIZE],size[SIZE],ou[SIZE],rt[SIZE],coun[SIZE],trans[SIZE][26];
inline int newnode() { return ++cnt; }
void insert_trie(int l,int r,int id)
{
int now=0;
for(int i=l;i<=r;++i)
{
if(!ch[now][str[i]-'a']) ch[now][str[i]-'a']=++tot;
now=ch[now][str[i]-'a'];
}
G[now].push_back(id);
}
void dfs(int u)
{
dfn[u]=++tim, ba[tim]=u, size[u]=1;
for(int i=0;i<26;++i) if(ch[u][i]) dfs(ch[u][i]),size[u]+=size[ch[u][i]];
ou[u]=tim;
}
void Insert(int id,int pre,int &pos)
{
int i,j,r=ed[id],l=st[id];
int now=pos=newnode();
for(i=r;i>=l;--i)
{
for(j=0;j<26;++j) trans[now][j]=trans[pre][j];
trans[now][str[i]-'a']=newnode();
pre=trans[pre][str[i]-'a'];
now=trans[now][str[i]-'a'];
coun[now]=coun[pre]+1;
}
}
int main()
{
// setIO("input");
int i,j;
scanf("%d",&n);
for(i=1;i<=n;++i)
{
ed[i]=strlen(str+1);
st[i]=strlen(str+1)+1;
scanf("%s",tmp+1);
int len=strlen(tmp+1);
for(j=1;j<=len;++j) str[++ed[i]]=tmp[j];
}
for(i=1;i<=n;++i) insert_trie(st[i],ed[i],i);
dfs(0);
for(i=1;i<=tim;++i)
{
rt[i]=rt[i-1];
for(j=0;j<(int)G[ba[i]].size();++j) Insert(G[ba[i]][j],rt[i],rt[i]);
}
scanf("%d",&m);
int lastans=0;
while(m--)
{
scanf("%s%s",t1+1,t2+1);
int len1=strlen(t1+1),len2=strlen(t2+1),now=0;
for(j=1;j<=len1;++j) t1[j]='a'+(t1[j]-'a'+lastans)%26;
for(j=1;j<=len2;++j) t2[j]='a'+(t2[j]-'a'+lastans)%26;
for(j=1;j<=len1;++j) now=ch[now][t1[j]-'a'];
if(!now) lastans=0,printf("0\n");
else
{
int re=0,l=rt[dfn[now]-1],r=rt[ou[now]];
for(j=len2;j>=1;--j)
{
l=trans[l][t2[j]-'a'];
r=trans[r][t2[j]-'a'];
}
printf("%d\n",lastans=coun[r]-coun[l]);
}
}
return 0;
}

  

BZOJ 4212: 神牛的养成计划 可持久化trie+trie的更多相关文章

  1. BZOJ 4212: 神牛的养成计划

    4212: 神牛的养成计划 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 142  Solved: 30[Submit][Status][Discus ...

  2. BZOJ.4212.神牛的养成计划(Trie 可持久化Trie)

    BZOJ 为啥hzw的题也是权限题啊 考虑能够匹配\(s1\)这一前缀的串有哪些性质.对所有串排序,能发现可以匹配\(s1\)的是一段区间,可以建一棵\(Trie\)求出来,设为\([l,r]\). ...

  3. 【BZOJ-4212】神牛的养成计划 Trie树 + 可持久化Trie树

    4212: 神牛的养成计划 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 136  Solved: 27[Submit][Status][Discus ...

  4. 【BZOJ4212】神牛的养成计划 Trie树+可持久化Trie树

    [BZOJ4212]神牛的养成计划 Description Hzwer成功培育出神牛细胞,可最终培育出的生物体却让他大失所望...... 后来,他从某同校女神 牛处知道,原来他培育的细胞发生了基因突变 ...

  5. [BZOJ4212]神牛的养成计划

    [BZOJ4212]神牛的养成计划 试题描述 Hzwer 成功培育出神牛细胞,可最终培育出的生物体却让他大失所望...... 后来,他从某同校女神 牛处知道,原来他培育的细胞发生了基因突变,原先决定神 ...

  6. 【bzoj4212】神牛的养成计划

    Portal --> bzoj4212 Description ​ 给你\(n\)个字符串,接下来有\(m\)个询问,每个询问由两个给定的字符串\(s_1\)和\(s_2\)组成,对于每个询问输 ...

  7. BZOJ4212 神牛的养成计划 (字典树,bitset)

    题面 Description Hzwer成功培育出神牛细胞,可最终培育出的生物体却让他大失所望- 后来,他从某同校女神 牛处知道,原来他培育的细胞发生了基因突变,原先决定神牛特征的基因序列都被破坏了, ...

  8. BZOJ第1页养成计划

    嗯,用这篇博客当一个目录,方便自己和学弟(妹?)们查阅.不定期更新. BZOJ1000   BZOJ1001   BZOJ1002   BZOJ1003   BZOJ1004   BZOJ1005   ...

  9. BZOJ第7页养成计划

    嗯,用这篇博客当一个目录,方便自己和学弟(妹?)们查阅.不定期更新. BZOJ1600   BZOJ1601   BZOJ1602   BZOJ1603   BZOJ1604   BZOJ1605   ...

随机推荐

  1. hdu 1427 速算24点【暴力枚举】

    速算24点 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  2. python_并发与通信

    独立的进程内存空间与共享的服务器进程空间 知识点一: 进程间通信的限制 进程是独立的,互不干扰的独立内存空间我们想不能修改变量但是,深层次问题是,这个进程与那个进程完全失去了联系 import mul ...

  3. Golang 常用的第三方包.

    Goland 下面这个license server 可用 http://idea.youbbs.org (2018-01-10 04:26:09) http://45.77.127.87:81(201 ...

  4. HUAWEI,H3C 三层交换机 常用命令

    <HUAWEI> display ip interface brief,命令全局模式下可以查看所有端口下的ip地址及物理状态display this interface,命令用来显示当前接 ...

  5. 阿里巴巴 Java 开发手册(四): OOP 规约

    . [强制]避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成 本,直接用类名来访问即可. 2. [强制]所有的覆写方法,必须加@Override 注解. 说明:getObje ...

  6. MongoDB和Java(4):Spring Data整合MongoDB(XML配置)

    最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...

  7. loj#10013 曲线(三分)

    题目 #10013. 「一本通 1.2 例 3」曲线 解析 首先这个题保证了所有的二次函数都是下凸的, \(F(x)=max\{s_i(x)\}i=1...n\)在每一个x上对应的最大的y,我们最后得 ...

  8. Python基础知识(三)

    Python基础知识(三) 一丶整型 #二进制转成十进制的方法 # 128 64 32 16 8 4 2 1 1 1 1 1 1 1 例如数字5 : 101 #十进制转成二进制的方法 递归除取余数,从 ...

  9. selenium自动化测试框架之PO设计模式

    面向对象的特性:封装.继承.多态.在自动化中一样适用,Selenium自动化测试中有一个名字常常被提及PageObject(思想与面向对象的特性相同),通过PO模式可以大大提高测试用例的维护效率. 传 ...

  10. 嵌入式 vlc从接收到数据流到播放视频的过程分析(经典)

    个人整理: Vlc流播放流程 vlc源码目录树: 目录名称 说明 bindings Java, CIL 和Python绑定 doc 帮助文档 (不是更新的) extras 另叙. include VL ...