[bzoj5417]你的名字
1.pp[pos[k]]<len(pos[k]表示k的某一个结束位置),因为不能被匹配
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 2000005
4 #define mid (l+r>>1)
5 struct ji{
6 int nex,to;
7 }edge[N];
8 int V,x,last,fa[N],pos[N],len[N],ch[N][26];
9 int VV,E,n,m,a,b,r[N],head[N],pp[N],ls[N*16],rs[N*16];
10 long long ans;
11 char s[N],t[N];
12 int New(){
13 fa[++V]=0;
14 len[V]=pos[V]=0;
15 memset(ch[V],0,sizeof(ch[V]));
16 return V;
17 }
18 void add_edge(int x,int y){
19 edge[E].nex=head[x];
20 edge[E].to=y;
21 head[x]=E++;
22 }
23 void add(int c,int id){
24 int p=last,np=last=New();
25 len[np]=len[p]+1;
26 pos[V]=id;
27 for(;(p)&&(!ch[p][c]);p=fa[p])ch[p][c]=np;
28 if (!p)fa[np]=x;
29 else{
30 int q=ch[p][c];
31 if (len[q]==len[p]+1)fa[np]=q;
32 else{
33 int nq=New();
34 pos[nq]=pos[q];
35 len[nq]=len[p]+1;
36 memcpy(ch[nq],ch[q],sizeof(ch[q]));
37 fa[nq]=fa[q];
38 fa[q]=fa[np]=nq;
39 for(;(p)&&(ch[p][c]==q);p=fa[p])ch[p][c]=nq;
40 }
41 }
42 }
43 void update(int &k,int l,int r,int x){
44 k=++VV;
45 if (l==r)return;
46 if (x<=mid)update(ls[k],l,mid,x);
47 else update(rs[k],mid+1,r,x);
48 }
49 int query(int k,int l,int r,int x,int y){
50 if ((!k)||(l>y)||(x>r))return 0;
51 if ((x<=l)&&(r<=y))return 1;
52 return query(ls[k],l,mid,x,y)|query(rs[k],mid+1,r,x,y);
53 }
54 void merge(int &k1,int k2){
55 if (k1*k2==0){
56 k1+=k2;
57 return;
58 }
59 ls[++VV]=ls[k1];
60 rs[VV]=rs[k1];
61 k1=VV;
62 merge(ls[k1],ls[k2]);
63 merge(rs[k1],rs[k2]);
64 }
65 void dfs(int k){
66 if (pos[k])update(r[k],1,n,pos[k]);
67 for(int i=head[k];i!=-1;i=edge[i].nex){
68 dfs(edge[i].to);
69 merge(r[k],r[edge[i].to]);
70 }
71 }
72 int main(){
73 scanf("%s%d",s,&m);
74 len[0]=-1;
75 n=strlen(s);
76 x=last=New();
77 for(int i=0;s[i];i++)add(s[i]-'a',i+1);
78 memset(head,-1,sizeof(head));
79 for(int i=2;i<=V;i++)add_edge(fa[i],i);
80 dfs(1);
81 x=New();
82 for(int i=1;i<=m;i++){
83 scanf("%s%d%d",t,&a,&b);
84 V=x-1;
85 last=New();
86 for(int j=0,k=1,l=0;t[j];pp[j++]=++l){
87 int c=t[j]-'a';
88 add(c,j);
89 while (!query(r[ch[k][c]],1,n,a+l,b)){
90 if (--l<0)break;
91 if (l==len[fa[k]])k=fa[k];
92 }
93 if (l<0)k=1;
94 else k=ch[k][c];
95 }
96 ans=0;
97 for(int j=x;j<=V;j++)ans+=max(0,len[j]-max(len[fa[j]],pp[pos[j]]));
98 printf("%lld\n",ans);
99 }
100 }
[bzoj5417]你的名字的更多相关文章
- 【BZOJ5417】[NOI2018]你的名字(线段树,后缀自动机)
[BZOJ5417][NOI2018]你的名字(线段树,后缀自动机) 题面 BZOJ 洛谷 题解 首先考虑\(l=1,r=|S|\)的做法,对于每次询问的\(T\)串,暴力在\(S\)串的\(SAM\ ...
- bzoj5417/luoguP4770 [NOI2018]你的名字(后缀自动机+线段树合并)
bzoj5417/luoguP4770 [NOI2018]你的名字(后缀自动机+线段树合并) bzoj Luogu 给出一个字符串 $ S $ 及 $ q $ 次询问,每次询问一个字符串 $ T $ ...
- BZOJ5417[Noi2018]你的名字——后缀自动机+线段树合并
题目链接: [Noi2018]你的名字 题目大意:给出一个字符串$S$及$q$次询问,每次询问一个字符串$T$有多少本质不同的子串不是$S[l,r]$的子串($S[l,r]$表示$S$串的第$l$个字 ...
- [BZOJ5417] [NOI2018]你的名字
Description 小A 被选为了ION2018 的出题人,他精心准备了一道质量十分高的题目,且已经把除了题目命名以外的工作都做好了. 由于ION 已经举办了很多届,所以在题目命名上也是有规定的, ...
- Material Design Reveal effect(揭示效果) 你可能见过但是叫不出名字的小效果
Material Design Reveal effect(揭示效果) 你可能见过但是叫不出名字的小效果 前言: 每次写之前都会来一段(废)话.{心塞...} Google Play首页两个tab背景 ...
- idea怎么设置自己的名字和时间
1.直接修改idea64.exe.vmoptions 里面添加上 -Duser.name=yourname 重启即可生效 1.file - settings-Editor- File and Code ...
- Java名字的由来
Java语言的历程丰富多彩,被现在众多程序员和企业广泛使用,不用质疑这是Java的领先技术的结果. Java是Sun公司开发的一种编程语言,Sun公司最初的方向是让Java来开发一些电器装置程序,如: ...
- iOS获取app图标和启动图片名字(AppIcon and LaunchImage's name)
在某种场景下,可能我们需要获取app的图标名称和启动图片的名称.比如说app在前台时,收到了远程通知但是通知栏是不会有通知提醒的,这时我想做个模拟通知提示,需要用到icon名称:再比如在加载某个控制器 ...
- 【Centos】修改网卡名字&随之出现的问题
自从学了工具tcpdump之后,里面会需要涉及到针对某个网卡抓包,因而会输入网卡名字,可是centOS7蛋疼的网卡默认命名实在是让人心碎,所以就想到了要修改网卡名字,步骤如下:(以下步骤涉及到我的错误 ...
随机推荐
- Git学习笔记01-安装
首先,什么是git? git是开源的分布式系统,能够将团队的项目上传至git,供团队修改demo 第一步:安装好git(推荐淘宝镜像下载,地址https://npm.taobao.org/mirror ...
- captcha_trainer 验证码识别-训练 使用记录
captcha_trainer 验证码识别-训练 使用记录 在爬数据的时候,网站出现了验证码,那么我们就得去识别验证码了.目前有两种方案 接入打码平台(花钱,慢) 自己训练(费时,需要GPU环境,快) ...
- 【UE4 调试】提升UE4源码版本Setup下载速度
更改setup.bat部分参数
- JVM:内存溢出OOM
JVM:内存溢出OOM 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 经典错误 JVM 中常见的两个 OOM 错误 StackoverflowError:栈溢出 ...
- Java编程开发学习路线图(附所有免费课程+在线自测)
转自 https://yq.aliyun.com/articles/134286?spm=5176.100239.0.0.1UfveS 摘要: 长期以来,Java一直占据TIOBE编程语言排行版第一 ...
- AIApe问答机器人Scrum Meeting 4.27
Scrum Meeting 3 日期:2021年4月27日 会议主要内容概述:汇报两日工作. 一.进度情况 组员 负责 两日内已完成的工作 后两日计划完成的工作 工作中遇到的困难 李明昕 后端 Tas ...
- OO课第三单元总结
一.梳理JML语言的理论基础 (1)理论基础 JMl的出现很大程度上一为了行为接口的规范化,用这种语言来指定特定模块的特定功能.JML的核心部分分为三个部分:前置条件(requires).后置条件(e ...
- 【BZOJ2070】列队春游———[组合数学+概率DP]
数学渣滓不可做の题OTZ Description (单身人士不可做 Input | Output 3 ...
- 【做题记录】[NOI2008] 假面舞会—有向图上的环与最长链
luogu 1477 [NOI2008] 假面舞会 容易发现: 如果图中没有环,那么面具种数一定是所有联通块内最长链之和,最少为 \(3\) . 如果有环,则面具种数一定是所有环的大小的最大公约数. ...
- Spring源码解读(二):Spring AOP
一.AOP介绍 面向方面编程(AOP)通过提供另一种思考程序结构的方式来补充面向对象编程(OOP).OOP中模块化的关键单元是类,而在AOP中,模块化单元是方面.方面实现了诸如跨越多种类型和对象的事务 ...