BZOJ 4212: 神牛的养成计划 可持久化trie+trie
思路倒是不难,但是这题卡常啊 ~
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的更多相关文章
- BZOJ 4212: 神牛的养成计划
4212: 神牛的养成计划 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 142 Solved: 30[Submit][Status][Discus ...
- BZOJ.4212.神牛的养成计划(Trie 可持久化Trie)
BZOJ 为啥hzw的题也是权限题啊 考虑能够匹配\(s1\)这一前缀的串有哪些性质.对所有串排序,能发现可以匹配\(s1\)的是一段区间,可以建一棵\(Trie\)求出来,设为\([l,r]\). ...
- 【BZOJ-4212】神牛的养成计划 Trie树 + 可持久化Trie树
4212: 神牛的养成计划 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 136 Solved: 27[Submit][Status][Discus ...
- 【BZOJ4212】神牛的养成计划 Trie树+可持久化Trie树
[BZOJ4212]神牛的养成计划 Description Hzwer成功培育出神牛细胞,可最终培育出的生物体却让他大失所望...... 后来,他从某同校女神 牛处知道,原来他培育的细胞发生了基因突变 ...
- [BZOJ4212]神牛的养成计划
[BZOJ4212]神牛的养成计划 试题描述 Hzwer 成功培育出神牛细胞,可最终培育出的生物体却让他大失所望...... 后来,他从某同校女神 牛处知道,原来他培育的细胞发生了基因突变,原先决定神 ...
- 【bzoj4212】神牛的养成计划
Portal --> bzoj4212 Description 给你\(n\)个字符串,接下来有\(m\)个询问,每个询问由两个给定的字符串\(s_1\)和\(s_2\)组成,对于每个询问输 ...
- BZOJ4212 神牛的养成计划 (字典树,bitset)
题面 Description Hzwer成功培育出神牛细胞,可最终培育出的生物体却让他大失所望- 后来,他从某同校女神 牛处知道,原来他培育的细胞发生了基因突变,原先决定神牛特征的基因序列都被破坏了, ...
- BZOJ第1页养成计划
嗯,用这篇博客当一个目录,方便自己和学弟(妹?)们查阅.不定期更新. BZOJ1000 BZOJ1001 BZOJ1002 BZOJ1003 BZOJ1004 BZOJ1005 ...
- BZOJ第7页养成计划
嗯,用这篇博客当一个目录,方便自己和学弟(妹?)们查阅.不定期更新. BZOJ1600 BZOJ1601 BZOJ1602 BZOJ1603 BZOJ1604 BZOJ1605 ...
随机推荐
- qt5信息提示框QMessageBox用法(很全)
information QMessageBox::information(NULL, "Title", "Content", QMessageBox::Yes ...
- AutoFac的简单使用教程
Autofac可以对代码进行依赖注入,实现控制反转.以下是本菜鸟在初次入门时的代码配置,其源码,内部原理都还有待日后研究.目前也只是仅仅做到了能够使项目正常使用而已. 跟我一样刚刚入门的菜鸟朋友们可以 ...
- 接口的鉴权cookie、session和token
1.HTTP是无状态协议 什么是无状态?就是说这一次的请求和上一次的请求是没有任何关系的,无法共享信息.好处就是速度快. 2.cookie.session的加入 HTTP请求是无状态的,所以解决共享信 ...
- robotframework的学习笔记(十八)——RequestsLibrary库的API介绍
requestsLibrary的关键字不多,常用的就几个. Create Session: 创建一个session,连接某个服务器.Create Ntlm Session: 也是创建一个session ...
- Guava Cache用法介绍
背景 缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用.在日长开发有很多场合,有一些数据量不是很大,不会经常改动,并且访问非常频繁.但是由于受限于硬盘IO的性能或者远程网络 ...
- Synchronized可重入锁通俗易懂的简单分析
可重入锁概念: 当一个线程得到一个对象锁后,再次请求此对象时时可以再次得到该对象的锁的,这也证明synchronized方法/块的内部调用本类的其他synchronized方法/块时,时永远可以得到锁 ...
- WebApi中将静态页面作为首页
WebApi中将静态页面作为首页 使用场景 在我的项目中使用Asp.Net WebApi作为后端数据服务,使用Vue作为前端Web,在服务器IIS上部署时需要占用两个端口,一个是80端口,用户在浏览器 ...
- plsql连接数据库后备注乱码|plsql连接数据库后中文乱码
-- 背景:连接开发库后查阅单表备注信息时发现所有的备注都显示为"???????". -- 解决方案: -- (1). 首先先确认数据库的编码格式字符集,查询数据库编码格式. -- ...
- 【问题】如何在Linux与Windows间共享文件
实验环境 Linux LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: CentOS Description: CentOS L ...
- Linux命令——groups
groups用于查询当前用户的属组,没有参数.