【LOJ3103】「JSOI2019」节日庆典
【题目链接】
- 点击打开链接
【思路要点】
- 考虑一种暴力维护候选点集的做法。
- 即,在字符串不断增长的同时,若已经可以确定 TiT_iTi 不再可能成为字典序最小的循环后缀,则将 iii 在候选点集中删除。
- 一个显然的事实是,令当前字符串已有 kkk 位,考虑 i<ji<ji<j ,若 Lcp(Ti,Tj)<k−j+1Lcp(T_i,T_j)<k-j+1Lcp(Ti,Tj)<k−j+1 ,则说明 Ti,TjT_i,T_jTi,Tj 在原串的第 kkk 位之前比较出了大小,从而 Ti,TjT_i,T_jTi,Tj 中较大的一个不再可能成为字典序最小的循环后缀。
- 此外,若 Lcp(Ti,Tj)≥k−j+1Lcp(T_i,T_j)\geq k-j+1Lcp(Ti,Tj)≥k−j+1 ,则说明 Ti,TjT_i,T_jTi,Tj 在原串的第 kkk 位之前不能比较出大小,若 k−j+1≥j−ik-j+1\geq j-ik−j+1≥j−i ,即原串的前 kkk 位形如 ABBCABBCABBC ,且 Ti=BBCA,Tj=BCAB,T2j−1=CABBT_i=BBCA,T_j=BCAB,T_{2j-1}=CABBTi=BBCA,Tj=BCAB,T2j−1=CABB 。注意到若 BCA≤CABBCA\leq CABBCA≤CAB ,有 Ti≤Tj≤T2j−iT_i\leq T_j\leq T_{2j-i}Ti≤Tj≤T2j−i ;若 BCA≥CABBCA\geq CABBCA≥CAB ,有 Ti≥Tj≥T2j−iT_i\geq T_j\geq T_{2j-i}Ti≥Tj≥T2j−i ,因此 TjT_jTj 不再可能成为字典序最小的循环后缀。
- 从而候选点集大小为 O(LogN)O(LogN)O(LogN) 级别,可以每次暴力重构。
- 计算答案时需要找到 TiT_iTi 最小的候选点,注意到此时我们只需比较某一后缀与原串的大小关系,可以在运行拓展 kmpkmpkmp 算法后实现 O(1)O(1)O(1) 比较。
- 时间复杂度 O(NLogN)O(NLogN)O(NLogN) 。
【代码】
#include<bits/stdc++.h> using namespace std; const int MAXN = 3e6 + 5; typedef long long ll; typedef long double ld; typedef unsigned long long ull; template <typename T> void chkmax(T &x, T y) {x = max(x, y); } template <typename T> void chkmin(T &x, T y) {x = min(x, y); } template <typename T> void read(T &x) {x = 0; int f = 1;char c = getchar();for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;for (; isdigit(c); c = getchar()) x = x * 10 + c - '0';x *= f; } template <typename T> void write(T x) {if (x < 0) x = -x, putchar('-');if (x > 9) write(x / 10);putchar(x % 10 + '0'); } template <typename T> void writeln(T x) {write(x);puts(""); } char s[MAXN]; int n, len[MAXN]; void exkmp(int n) {len[1] = n;int Max = 1, pos = 1;for (int i = 2; i <= n; i++) {if (i <= Max) len[i] = min(len[i - pos + 1], Max - i + 1);while (i + len[i] <= n && s[i + len[i]] == s[1 + len[i]]) len[i]++;if (i + len[i] - 1 > Max) {Max = i + len[i] - 1;pos = i;}} } int main() {scanf("%s", s + 1);exkmp(n = strlen(s + 1));vector <int> points;for (int i = 1; i <= n; i++) {points.push_back(i);vector <int> newpoints;for (auto x : points) {bool flg = true;while (!newpoints.empty()) {int tmp = newpoints.back();if (s[i] > s[tmp + i - x]) flg = false;if (s[i] >= s[tmp + i - x]) break;newpoints.pop_back();}if (flg && (newpoints.empty() || i - x + 1 < x - newpoints.back())) newpoints.push_back(x);}points = newpoints;int ans = points[0];for (int j = 1; j < points.size(); j++) {int x = points[j], tmp = ans + i - x + 1;if (len[tmp] >= i - tmp + 1) {int tnp = i - tmp + 2;if (len[tnp] < i - tnp + 1 && s[tnp + len[tnp]] < s[1 + len[tnp]]) ans = x;} else if (s[1 + len[tmp]] < s[tmp + len[tmp]]) ans = x;}printf("%d ", ans);}return 0; }
【LOJ3103】「JSOI2019」节日庆典相关推荐
- 【LOJ】#3103. 「JSOI2019」节日庆典
LOJ#3103. 「JSOI2019」节日庆典 能当最小位置的值一定是一个最小后缀,而有用的最小后缀不超过\(\log n\)个 为什么不超过\(\log n\)个,看了一下zsy的博客.. 假如\ ...
- 「JSOI2019」节日庆典 (Z-Algorithm)
传送门 考虑一个后缀 Si...nS_{i...n}Si...n,如果加上一个任意字符 ccc 可以使得 Si...ncS_{i...n}cSi...nc 为字典序最小的后缀,那么将其称为好后缀, ...
- LOJ #3103. 「JSOI2019」节日庆典
题意 给定字符串 \(S\) ,对于 \(S\) 的每个前缀 \(T\) 求 \(T\) 所有循环同构串的字典序最小的串,输出其起始下标.(如有多个输出最靠前的) \(|S| \le 3 \times ...
- 教师节特辑丨网易云信:素质教育「名师」是如何炼成的?
又到一年教师节,在这个特殊的节日里,你的脑海中会浮现什么? 是老师们每天的谆谆教诲与循循善诱,还是他们带来的妙趣横生.灵动鲜活的课堂,亦或是他们创造的科技感十足.多维互动的教学模式? 说起教学模式,科 ...
- Loj #2568. 「APIO2016」烟花表演
Loj #2568. 「APIO2016」烟花表演 题目描述 烟花表演是最引人注目的节日活动之一.在表演中,所有的烟花必须同时爆炸.为了确保安全,烟花被安置在远离开关的位置上,通过一些导火索与开关相连 ...
- 人民创意联合《国家人文历史》独家首发「诗经」端午主题数字藏品
利用数字技术开展文物保护.文化传承在全世界已经成为了一股强劲的浪潮.中共中央办公厅.国务院办公厅近日印发的<关于推进实施国家文化数字化战略的意见>中提出,到"十四五"时 ...
- 2021玉林芳草中学高考成绩查询,「分数线」2020年成都玉林中学招生录取分数线...
学校名称 录取分数线 成都列五中学 596 成都武侯高级中学 570 成都玉林中学办学效益 成都玉林中学(Chengdu Yulin High School)位于成都高新南区 是四川省示范性普通高中 ...
- 大白天「撞鬼」?特斯拉在无人墓地感应到行人,传感器真能测鬼?
点击上方"CVer",选择加"星标"置顶 重磅干货,第一时间送达 本文转载自:新智元 来源:twitter | 编辑:小匀 [导读]特斯拉会通过传感器.摄像 ...
- 在「生机」与「升级」持续的化学反应之中,科技企业走向新生
「当我站在一片漆黑的屋子里,外面也是一片漆黑.但是,在这样一片漆黑的环境里,我看到的是远处城市里的点点灯光,而这灯光带给我的,便是勃勃的生机.」白鸦在一年一度的春季发布会上如是说.同样地,正是因为如此 ...
最新文章
- 通过data:image/png;base64把图片直接写在src里
- [分享]毕业了【其实不想毕业】
- HDU 6114 Chess 【组合数】(2017百度之星程序设计大赛 - 初赛(B))
- 9、使用GROUP BY分组查询
- 机器学习(二)Logistic回归(Logistic regression)算法
- php程序里如何实现图片翻页,php图片上传代码一例-php 生成翻页链接(页码)列表的...-带多种分页方式的php分页类_169IT.COM...
- html菜单栏用户点击完自动收缩,几个不错的自动收缩菜单导航效果
- Python内置函数sorted()从入门到精通
- 廖雪峰python教程-Python简介
- 题解-Codeforces671D Roads in Yusland
- Java基础笔记(三)
- 数组的声明、创建、初始化
- [英语学习]3招速成英语发音 背景音乐和学习随感
- scrapy爬虫框架结构
- Hunger Snake
- 王宇阳:六个案例里的SEO启发
- windows10上安装mysql(详细步骤)
- 基于51单片机的烟雾火灾报警系统
- 3D变电站vr建模三维展示可视化管理系统
- pdcp层的作用_pdcp层的主要功能