[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蛋疼的网卡默认命名实在是让人心碎,所以就想到了要修改网卡名字,步骤如下:(以下步骤涉及到我的错误 ...
随机推荐
- IO之字符流
什么是字符流 对于文本文件(.txt .java .c .cpp) 使用字符流处理 注意点 读入的文件一定要存在 否则就会报FileNotFoundException 异常的处理 为了保证流资源 一定 ...
- Win10连WiFi显示无internet,安全 却可以正常上网
1.现象: win10连WiFi显示无internet,安全 可以正常上网 2.原因: Wind10升级系统补丁后,更新了系统检查是否联网的注册表配置,新的域名在国内存在无法连接情况.导致此问题发生 ...
- Bayou复制分布式存储系统
本文主要参考文献[1]完成. 第1章导读 Bayou是一个复制的.弱一致性的存储系统,用于移动计算环境.为了最大化可用性,Bayou为用户提供了可以任意读写访问的副本.Bayou的设计侧重于为应用程序 ...
- pip 命令总结
建议和 Conda 命令一起看,pip 和conda命令有点相似.<Conda 命令> 1 查看帮助文档 pip --help 使用该命令将告诉你 pip 的常用命令. 使用时,输入pip ...
- CF992E Nastya and King-Shamans(线段树二分+思维)
这是一道卡常好题 从160s卡到36s qwq 由于题目设计到原数组的单点修改,那么就对应着前缀和数组上的区间加. 很显然能想到用线段树来维护这么个东西. 那么该如果求题目要求的位置呢 我们来看这个题 ...
- 👊 Spring技术原理系列(7)带你看看那些可能你还不知道的Spring特性技巧哦!
前提介绍 本文主要介绍相关Spring框架的一些新特性问题机制,包含了一些特定注解方面的认识. @Lazy可以延迟依赖注入 @Lazy注解修饰在类层面! @Lazy @Service public c ...
- airtext初始化(一)
- Java:ConcurrentHashMap类小记-2(JDK7)
Java:ConcurrentHashMap类小记-2(JDK7) 对 Java 中的 ConcurrentHashMap类,做一个微不足道的小小小小记,分三篇博客: Java:ConcurrentH ...
- 2021.10.12考试总结[NOIP模拟75]
T1 如何优雅的送分 考虑式子的实际意义.\(2^{f_n}\)实际上就是枚举\(n\)质因子的子集.令\(k\)为这个子集中数的乘积,就可以将式子转化为枚举\(k\),计算\(k\)的贡献. 不难得 ...
- 2021.9.25考试总结[NOIP模拟61]
终于有点阳间题了然而挂了60pts 哈哈 T1 交通 类似简单题,限制看似很复杂,但不难发现当确定一条边是否被删后会产生裙带关系,很多边会跟着自动被确定是否被删. 仔细观察可以得出这种关系会构成偶环结 ...