bzoj1396_bzoj3771

bzoj1396_bzoj3771传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1396题目大意:题解:后缀自动机,只出现一次,那么就是right值为1,那么对于一段1—-L—-R来说,(L—-R)为一个最短识别子串对于(1—-L-1)则可以用R-i+1来更新,对于(L—R)则可以用R-L+1来更新,那么两个线段树来维护即可。代码:

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1396

题目大意:

bzoj1396_bzoj3771

题解:后缀自动机,只出现一次,那么就是right值为1,那么对于一段1—-L—-R来说,(L—-R)为一个最短识别子串对于(1—-L-1)则可以用R-i+1来更新,对于(L—R)则可以用R-L+1来更新,那么两个线段树来维护即可。

代码:

bzoj1396_bzoj3771
bzoj1396_bzoj3771

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #include<cmath>
 6 #define maxn 100005
 7 using namespace std;
 8 char s[maxn];
 9 int n,m,tot,root;
10 bool v[maxn*2];
11 struct data{
12     int last,son[maxn*2][26],val[maxn*2],fa[maxn*2];
13     void prepare(){root=last=tot=1;}
14     int newnode(int x){val[++tot]=x; return tot;}
15     void extend(int x)
16     {
17         int p=last,np=newnode(val[p]+1); last=np; 
18         for (; p && !son[p][x]; p=fa[p]) son[p][x]=np;
19         if (!p) fa[np]=root;
20         else
21         {
22             int q=son[p][x];
23             if (val[q]==val[p]+1) fa[np]=q;
24             else
25             {
26                 int nq=newnode(val[p]+1);
27                 memcpy(son[nq],son[q],sizeof(son[nq]));
28                 fa[nq]=fa[q];fa[q]=fa[np]=nq;
29                 for (; p && son[p][x]==q; p=fa[p]) son[p][x]=nq; 
30              } 
31          } 
32     }
33     void build ()
34     {
35         for (int i=1; i<=n; i++) extend(s[i]-'a'); 
36     }
37     void whoisfather()
38     {
39         for (int i=1; i<=tot; i++) v[fa[i]]=1;
40     }
41 }SAM;
42 struct T{
43     int mn[maxn*4];
44     T(){memset(mn,0x3f,sizeof(mn));}
45     void insert(int z,int l,int r,int x,int y,int w){
46         if(l>y||r<x) return;
47         if(l>=x&&r<=y){mn[z]=min(mn[z],w);return;}
48         int mid=(l+r)>>1;
49         insert(z*2,l,mid,x,y,w); insert(z*2+1,mid+1,r,x,y,w);
50     }
51     int query(int z,int l,int r,int x){
52         if(l==r&&l==x) return mn[z];
53         int mid=(l+r)>>1;
54         if(x<=mid) return min(mn[z],query(z*2,l,mid,x));
55         else return min(mn[z],query(z*2+1,mid+1,r,x));
56     }
57 }f,t;
58 int main()
59 {
60     scanf("%s",s+1); n=strlen(s+1);
61     SAM.prepare();
62     SAM.build();
63     SAM.whoisfather();
64     for (int i=1; i<=tot; i++)
65     {
66         if (!v[i])
67         {
68             int l=SAM.val[i]-SAM.val[SAM.fa[i]],r=SAM.val[i];
69             f.insert(1,1,n,l,r,r-l+1);
70             if (l>1) t.insert(1,1,n,1,l-1,r);
71         }
72     }
73     for (int i=1; i<=n; i++) printf("%d\n",min(f.query(1,1,n,i),t.query(1,1,n,i)-i+1));
74 }

View Code

 注:oyzx神犇清早刷神题,我就只能默默写渣渣题。

  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169941.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 考研数据库系统概论题目整理总结_数据库系统概论pdf

    考研数据库系统概论题目整理总结_数据库系统概论pdf数据库系统概论题目自整理说复试题目过于牵强,只是自己整理的一些知识点而已,为了便于理解和背诵,有些部分定义和说明尽量简明扼要,如有错误请多多指教!(不可转载)1.试述数据、数据库、数据库系统、数据库管理系统的概念。(l)数据(Data):描述事物的符号记录称为数据。数据的含义称为语义,数据与其语义是不可分的。(2)数据库(DataBase,简称DB):若干个相互之间有关联关系的表的集合,表就是关系。数据库中的数据具有永久存储,易扩展,可共享的特点。(3)数据库系统(Data

    2022年9月2日
    2
  • python 根据uuid 获取mac地址

    python 根据uuid 获取mac地址importuuidtry:mac=uuid.UUID(int=uuid.getnode()).hex[-12:]mac_address=’:’.join([mac[e:e+2]foreinrange(0,11,2)])except:mac_address=”print(mac_address)

    2022年8月10日
    34
  • macpycharm2022.01激活码[最新免费获取]

    (macpycharm2022.01激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlCJM5ZJBPHS-eyJsaWNlbnNlSW…

    2022年3月31日
    187
  • mysql乐观锁总结和实践(一)

    mysql乐观锁总结和实践(一)

    2022年3月7日
    61
  • SpringMVC框架理解

    SpringMVC框架理解1.Spring与Web环境集成1.1ApplicationContext应用上下文获取方式应用上下文对象是通过newClasspathXmlApplicationContext(spring配置文件)方式获取的,但是每次从容器中获得Bean时都要编写newClasspathXmlApplicationContext(spring配置文件),这样的弊端是配置文件加载多次,应用上下文对象创建多次。在Web项目中,可以使用ServletContextListener监听Web应用的启动,

    2022年6月22日
    28
  • Flowable 6.7.0版本新功能特性

    Flowable 6.7.0版本新功能特性Flowable6.7.0版本主要增强的是BPM异步功能:1、实现了全局锁定机制,以更好地支持在具有多个Flowable引擎的设置中使用异步执行器2、添加了对多实例变量聚合的支持3、当多实例是一个自动步骤或一系列自动步骤时,为异步多实例使用添加了一个优化标志。如果设置,引擎将大大降低资源消耗,并删除乐观锁定异常,通常会提高性能4、从Task监听器抛出的异常不再包含在FlowableException中5、在此版本中,已升级到SpringBoot2.5.4和Spri

    2022年5月22日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号