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神犇清早刷神题,我就只能默默写渣渣题。

  

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 给定一个输入文件,包含40亿个非负整数。产生一个不在该文件中的整数。内存限制:1GB…

    给定一个输入文件,包含40亿个非负整数。产生一个不在该文件中的整数。内存限制:1GB…

  • 安装sklearn库的命令_sklearn库手册中文版pdf

    安装sklearn库的命令_sklearn库手册中文版pdf首先,SKlearn需要三个依赖库,分别进行安装。如果已经安装好了Python,那么可以直接运用pip命令来安装这些库。pip命令自带版本一般比较旧,需要更新。使用如下命令更新:更新完成后,直接运行:pipinstallnumpypipinstallmatplotlibpipinstallscipypipinstallsklearn注:直接利用ana…

    2022年10月17日
  • ANSI编码简述_ansi格式编码

    ANSI编码简述_ansi格式编码前情提要美国人最先用电脑,发明了足够他们使用的ASCII编码(127个,1个字节都没用完)。后来欧洲人发现127个不太够,把ASCII没用完的位置用上了(拓展字符集),还叫ASCII。再后来中国想用电脑打汉字,显然256个就太不够了,于是产生了GB2312,GBK,GB18030以及港澳台地区的Big5。此外韩国也有自己韩EUC-KR。ANSI编码为了保证Windows在不同语言文字的国家都能用。微软采用了标准代码页(CodePage,代码页是字符集编码的

  • 服务器raid5阵列修复,RAID5磁盘阵列的安装与故障修复

    服务器raid5阵列修复,RAID5磁盘阵列的安装与故障修复本文将为大家简单介绍RAID5磁盘阵列的相关内容,以及在磁盘阵列发生故障后,我们应该怎么样去修复RAID5磁盘阵列的故障。有兴趣的用户,敬请关注!如何实现RAID5磁盘阵列ATARAID控制器目前市场上的RAID控制器主要有两种:1、主板上集成的IDERAID控制器,现在很多高端主板都具有集成ATARAID控制器。2、一款支持并行接口RAID5磁盘阵列模式的磐英I875P主板,以及单独的…

  • echarts数据可视化如何实现_数据可视化页面

    echarts数据可视化如何实现_数据可视化页面ECharts实现数据可视化入门教程(超详细)ECharts介绍ECharts入门教程第一步:下载并引入scharts.js文件第二步:编写代码目录结构编写index.html代码效果展示ECharts的基础配置主要配置(常用的)案例讲解ECharts介绍官网链接:ApacheEChartsECharts是一个使用JavaScript实现的开源可视化库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖矢

    2022年10月12日
  • JS实现图片循环滚动

    JS实现图片循环滚动之前在前端的时候有遇到这样一个问题,实现JS图片的循环滚动,然后鼠标移入的时候停止滚动,鼠标移开继续滚动,这里无非就是设置了一个定时器,鼠标移上时清除定时器达到滚动停止的目的,鼠标移开时重设定时器,代码如下:<!DOCTYPE><html> <head> <metacharset=”UTF-8″> <title>JS实…

发表回复

您的电子邮箱地址不会被公开。

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