传送门

  • 考虑一个后缀 Si...nS_{i...n}Si...n​,如果加上一个任意字符 ccc 可以使得 Si...ncS_{i...n}cSi...n​c 为字典序最小的后缀,那么将其称为好后缀,跟 ZJOI2017ZJOI2017ZJOI2017 的结论一样,好后缀的集合大小是 log⁡∣S∣\log |S|log∣S∣ 的,并且好后缀的长度每次至少翻倍,证明:ZJOI2017字符串
  • 于是暴力维护这个集合,只需要考虑比较大小,发现每次需要比较一个后缀和从 1 开始的后缀大小,用 Z−algorithmZ-algorithmZ−algorithm 可以 O(1)O(1)O(1) 求 LCPLCPLCP,复杂度 O(nlog⁡n)O(n\log n)O(nlogn)
#include<bits/stdc++.h>
#define cs const
#define pb push_back
using namespace std;
cs int N = 3e6 + 50;
int n; char S[N];
int main(){#ifdef FSYolandafreopen("1.in","r",stdin);#endifscanf("%s",S+1); n=strlen(S+1);static int lcp[N]; int mx=1, pt=1; lcp[1]=n;for(int i=2; i<=n; i++){if(i<=mx) lcp[i]=min(lcp[i-pt+1],mx-i+1);while(i+lcp[i]<=n && S[i+lcp[i]]==S[1+lcp[i]]) ++lcp[i];if(i+lcp[i]-1>mx) pt=i, mx=i+lcp[i]-1;} vector<int> St;for(int i=1; i<=n; i++){St.pb(i); vector<int> nw;for(auto t : St){bool ok = true;while(!nw.empty()){int x = nw.back();if(S[i]>S[i-t+x]) ok = false;if(S[i]>=S[i-t+x]) break; nw.pop_back();} if(ok&&(nw.empty()||(i-t<=t-nw.back()))) nw.pb(t);} St = nw;int as = St[0];for(int j=1,t; j<St.size(); j++){t = St[j]; int pt = as + i - t + 1;bool ok = false;if(pt+lcp[pt]<=i) ok|=S[1+lcp[pt]]<S[pt+lcp[pt]];else{ int x=1+i-pt+1;if(x+lcp[x]<=i) ok|=S[x+lcp[x]]<S[1+lcp[x]];} if(ok) as = t;} cout << as << " "; } return 0;
}

「JSOI2019」节日庆典 (Z-Algorithm)相关推荐

  1. 【LOJ】#3103. 「JSOI2019」节日庆典

    LOJ#3103. 「JSOI2019」节日庆典 能当最小位置的值一定是一个最小后缀,而有用的最小后缀不超过\(\log n\)个 为什么不超过\(\log n\)个,看了一下zsy的博客.. 假如\ ...

  2. 【LOJ3103】「JSOI2019」节日庆典

    [题目链接] 点击打开链接 [思路要点] 考虑一种暴力维护候选点集的做法. 即,在字符串不断增长的同时,若已经可以确定 TiT_iTi​ 不再可能成为字典序最小的循环后缀,则将 iii 在候选点集中删 ...

  3. LOJ #3103. 「JSOI2019」节日庆典

    题意 给定字符串 \(S\) ,对于 \(S\) 的每个前缀 \(T\) 求 \(T\) 所有循环同构串的字典序最小的串,输出其起始下标.(如有多个输出最靠前的) \(|S| \le 3 \times ...

  4. 人民创意联合《国家人文历史》独家首发「诗经」端午主题数字藏品

    利用数字技术开展文物保护.文化传承在全世界已经成为了一股强劲的浪潮.中共中央办公厅.国务院办公厅近日印发的<关于推进实施国家文化数字化战略的意见>中提出,到"十四五"时 ...

  5. 读心术:从零知识证明中提取「知识」——探索零知识证明系列(三)

    本文已更新至Githubhttps://github.com/sec-bit/learning-zkp/blob/master/zkp-intro/3/zkp-pok.md 导言:有些理论非常有趣,零 ...

  6. 【LOJ】【树形DP】2485 「CEOI2017」Chase

    LOJ 2485 「CEOI2017」Chase 题目大意 ◇题目传送门◆ 似乎压缩起来有点困难,所以就不压缩了吧 QwQ- 分析 考虑扔一个磁铁能够产生的让逃亡者和追逐者之间的差异. 这个差异就是这 ...

  7. 在「生机」与「升级」持续的化学反应之中,科技企业走向新生

    「当我站在一片漆黑的屋子里,外面也是一片漆黑.但是,在这样一片漆黑的环境里,我看到的是远处城市里的点点灯光,而这灯光带给我的,便是勃勃的生机.」白鸦在一年一度的春季发布会上如是说.同样地,正是因为如此 ...

  8. 「图论」第1章 并查集课堂过关

    文章目录 A. [例题1][模板]并查集 题目 代码 B. [例题2]程序自动分析 题目 代码 C. [例题3]银河英雄传说 题目 题目背景 题目描述 输入格式 输出格式 输入输出样例 说明/提示 思 ...

  9. 一位老码农的分享:一线程序员该如何面对「中年危机」?

    如果这是第二次看到我的文章,欢迎文末扫码订阅我个人的公众号(跨界架构师)哟~   本文长度为2728字,建议阅读8分钟. 坚持原创,每一篇都是用心之作- 先来聊一下这个问题的背景吧. 前两天有小伙伴问 ...

最新文章

  1. android de,什么是Android Pre-Dexing,以及如何提高性能?
  2. CC 攻击检测研究现状
  3. 【理论】红黑树的实现原理
  4. TensorFlow 笔记3--模型的保存与恢复
  5. 【数据竞赛】NLP竞赛中99%上升的技巧!
  6. c语言两种排序方法的组合,排列和组合算法的实现方法_C语言经典案例
  7. android 图片浏览控件_Android自动化测试23--Appium同步点
  8. 所以Apache基金会不受美国法律约束?
  9. 最长公共前缀_最长的公共前缀
  10. 2019 编程语言终极排行榜:Java 稳坐榜首!
  11. 从程序员到项目经理(九):程序员加油站 -- 再牛也要合群
  12. 最高月薪25K!一周收到7个15K以上的offer,他是如何做到的?
  13. setwindowpos怎么改变z序_Windows转Mac——操作习惯的改变!
  14. 常用股票软件linux,在 Linux 下看股票?
  15. Windows10设置动态桌面壁纸
  16. 怎样远程控制另一台电脑
  17. 湖北一公司发生闪爆事故,这套化工厂巡检系统你有吗?
  18. 【控制】鲁棒性 H2 H无穷
  19. 王者战力查询接口(图文版)
  20. item_get - VVIC根据ID取商品详情 API

热门文章

  1. 画论72 范玑《过云庐论画》
  2. 小学计算机金山画王教案,小学金山画王教案精品资料.pdf
  3. 【组织架构】中国铁路昆明局集团有限公司
  4. kerberos使用详解
  5. 15万左右就能买国产知名纯电SUV——奇瑞大蚂蚁
  6. java版我的世界附魔指令_我的世界手机版附魔指令大全 怎么使用附魔指令
  7. java的方式实现腾讯云ocr名片识别功能
  8. 第七章 面向对象核心技术
  9. go-micro接口调用
  10. hdu 4578 Transformation