HDU6583 Typewriter

tags:后缀自动机

题意

一开始你有一个空串,你有两种操作,一是向这个串的末尾加上任意小写字母,代价为 \(p​\), 二是向这个串的末尾加上这个串的任意一个子串,告诉你最终状态,让你求最少要多少代价才能变成最终状态

题解

用 \(f_i\) 表示变成 \(s[1,i]\) 的最小代价

那么对于第一种操作 \(f_i=f_{i-1}+p\)

对于第二种操作 \(f_i=f_{j-1}+q\), 其中, \(s[j,i]\) 在 \(s[1,j-1]\) 种出现过

第一种很好转移,第二种用后缀自动机维护,由于 \(j\) 是单调的,所以在 \(j\) 向右移时将 \(s_j\) 加入 SAM, 然后维护 \(s[l,r]\) 的节点即可,时间复杂度是 \(O(n)\) 的

#include<cstdio>
#include<cstring>
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
template<typename T>inline void rd(T&x){int fl=0,ch;while(ch=getchar(),ch<48||57<ch)fl^=!(ch^45);x=(ch&15);while(ch=getchar(),47<ch&&ch<58)x=x*10+(ch&15);if(fl)x=-x;}
template<typename T>inline void pt(T x){if(x<0)putchar('-'),x=-x;if(x>9)pt(x/10);putchar(x%10+48);}
template<typename T>inline void pt(T x,int ch){pt(x),putchar(ch);}
template<typename T>inline T max(const T&x,const T&y){return x<y?y:x;}
template<typename T>inline T min(const T&x,const T&y){return x<y?x:y;}
typedef long long ll;
const int N=200005;
int n,w1,w2,f[N];char s[N];ll ans;
struct SAM{int cnt,lst,fa[N<<1],ch[N<<1][26],len[N<<1];SAM(){cnt=lst=1;}void clear(){for(int i=1;i<=cnt;++i)fa[i]=len[i]=0,memset(ch[i],0,sizeof(ch[i]));cnt=lst=1;}void extend(int c){int p=lst,np=lst=++cnt;len[np]=len[p]+1;for(;p&&!ch[p][c];p=fa[p])ch[p][c]=np;if(!p)fa[np]=1;else{int q=ch[p][c];if(len[p]+1==len[q])fa[np]=q;else{int nq=++cnt;len[nq]=len[p]+1;memcpy(ch[nq],ch[q],sizeof(ch[nq]));fa[nq]=fa[q],fa[q]=fa[np]=nq;for(;p&&ch[p][c]==q;p=fa[p])ch[p][c]=nq;}}}
}sam;
signed main(){while(scanf("%s",s+1)!=EOF){rd(w1),rd(w2);n=strlen(s+1);sam.clear();int p=1,l=1;for(int r=1;r<=n;++r){f[r]=f[r-1]+w1;int c=s[r]-'a';while((!sam.ch[p][c]||r-l+1>l-1)&&l<=r){sam.extend(s[l++]-'a');while(p&&sam.len[sam.fa[p]]>=r-l)p=sam.fa[p];if(!p)p=1;}p=sam.ch[p][c];while(p&&sam.len[sam.fa[p]]>=r-l+1)p=sam.fa[p];if(!p)p=1;if(l<=r){f[r]=min(f[r],f[l-1]+w2);}}pt(f[n],'\n');}return 0;
}

转载于:https://www.cnblogs.com/xay5421/p/HDU6583.html

「HDU6583 Typewriter」 - 后缀自动机相关推荐

  1. 10年读4个博士学位的“神之子”创办「莆田系」AI顶会,骗欧美学术精英,收报名费3688元...

    文末留言区送 6 本机械工业出版社赞助书籍 贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI 机器人领域顶会ICRA 2021,将于明年7月19-21日在奥地利维也纳举办,报名注册费用45 ...

  2. 全文解析:面向基于区块链的「机器人经济学」概念中,如何验证自主智能体的行为?...

    原文来源:arXiv 作者:Konstantin Danilov.Ruslan Rezin.Alexander Kolotov. Ilya Afanasyev 「雷克世界」编译:嗯~是阿童木呀.KAB ...

  3. 「AHOI / HNOI2018」转盘 解题报告

    「AHOI / HNOI2018」转盘 可能是我语文水平不太行... 首先可以猜到一些事实,这个策略一定可以被一个式子表示出来,不然带修修改个锤子. 然后我们发现,可以枚举起点,然后直接往前走,如果要 ...

  4. 职称计算机考试选择题,职称计算机考试综合选择题「附答案」.docx

    职称计算机考试综合选择题「附答案」 一.选择题 .PoWerPoint 中,插入凶片操作中,描入的图片必须满足一定的格式,下列选项中,不属于于图片格式的后缀是 (D) . .选出关于 PowerPoi ...

  5. 何以为「我来」?全方位解读笔记新秀高速增长

    谈到国内的云端笔记协作平台,不得不提到国内的新秀产品--「我来」,自去年 9 月份上线至今,「我来」用户已超过 20 万,每月正以 200%-300% 的速度持续增长中,活跃用户日均使用时长超过 30 ...

  6. php psr-2,「PSR 规范」PSR-2 编码风格规范

    编码风格指南 本篇规范是 PSR-1 基本代码规范的继承与扩展. 本规范希望通过制定一系列规范化PHP代码的规则,以减少在浏览不同作者的代码时,因代码风格的不同而造成不便. 当多名程序员在多个项目中合 ...

  7. 自考计算机网络技术一,2017自考计算机网络技术填空题「附答案」

    2017自考计算机网络技术填空题「附答案」 一.填空题 1.物理层的功能是实现原始数据在_______上的传输,它是数据通信的基础功能,实际的比特传输,是指在_______之上为上一个传输原始比特流的 ...

  8. 「小算法」回文数与数值合法性检验

    喵喵喵,小夕最近准备复习一下数学和基础算法,尽量每篇推送下面会附带点数学和基础算法的小文章.说不定哪天就用(考)到了呢( ̄∇ ̄)注意哦,与头条位的文章推送不同,「小公式」和「小算法」里的小标题之间可能 ...

  9. await原理 js_「速围」Node.js V14.3.0 发布支持顶级 Await 和 REPL 增强功能

    本周,Nodejs v14.3.0 发布.这个版本包括添加顶级 Await.REPL 增强等功能. REPL 增强 通过自动补全改进对 REPL 的预览支持,例如,下图中当输入 process.ver ...

  10. macos 全局代理 app_「主观向」macOS 好软推荐(使用体验)

    Hi All,我是@旅客君,经过了两个月左右使用 MacBook 的体验,我认为 macOS 的确为我们提供了一个非常好的工作(效率)平台,而在 macOS 上优质的应用也有不少,接下来在这篇文章当中 ...

最新文章

  1. 将大核卷积分三步,清华胡事民、南开程明明团队全新视觉骨干VAN,超越SOTA ViT和CNN...
  2. Flutter开发之SimpleDialog对话框组件-1(40)
  3. 微信小程序————经纬度转化为具体位置(逆地址解析)
  4. SpringBoot + MyBatis(注解版),常用的SQL方法
  5. 做了项目才知道的Cookie和Session
  6. SLAM 无人车融合 IMU 前与 融合 IMU 后的实测效果演示
  7. 少儿编程python学啥-少儿编程学什么?少儿编程课程体系介绍
  8. 3U VPX板卡设计
  9. Hadoop数据开发笔试题(一)
  10. 计算机键盘灯光怎么关闭,电脑关机键盘灯一直亮着解决方法
  11. 2021-10-08
  12. c语言oj质数还是合数,求数据帝帮忙测试一下代码,已被南洋理工大学的oj搞蒙.....
  13. 克隆硬盘后进不去系统_克隆硬盘后进不去系统_如何将硬盘克隆到较小的固态硬盘?...
  14. 百度地图 - 周边检索
  15. 460.LFU 缓存
  16. 【OpenCV在图片上绘制点、圆(C++)】
  17. 深度linux64位系统下载,深度操作系统下载 deepin深度操作系统 15.10 正式版 64/32位 下载-脚本之家...
  18. 【python 图片文字识别】pyocr图片文字识别
  19. 【Java UI】HarmonyOs如何集成Hawk
  20. 数据仓库—stg层_数据仓库(一):认识数据仓库

热门文章

  1. 批量删除数据库表数据 备份
  2. 与.NET以及微软产品相关的域名出售
  3. 操作系统复习笔记(一)
  4. 如何在 Mac 上修复丢失的鼠标?
  5. MacBook Pro 用户学会这 5 个小技巧,让你的 Touch Bar 更好用
  6. 排版设计软件QuarkXPress 2022 for mac
  7. SyncBird Pro的PhoneCare功能如何使用
  8. Vim 实用技术,第 2 部分: 常用插件(转)
  9. springboot-增加自定义资源映射
  10. httpd-2.4.18源码安装