【LOJ】#3103. 「JSOI2019」节日庆典
LOJ#3103. 「JSOI2019」节日庆典
能当最小位置的值一定是一个最小后缀,而有用的最小后缀不超过\(\log n\)个
为什么不超过\(\log n\)个,看了一下zsy的博客。。
假如\(i = AAB\),\(j = AB\),\(B\)是\(A\)的一个严格前缀,\(|j| < |i| < 2|j|\)
但是有\(k = B\),导致了若\(j\)比\(i\)优,则\(k\)会比\(j\)优,\(j\)比\(k\)优,则\(i\)会比\(j\)优,那么\(j\)就没用了
然后取这\(\log\)里最大的就是一段后缀和开头比较,可以预处理出每个串和开头的lcp,用扩展kmp
#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define eps 1e-10
#define ba 47
#define MAXN 5005
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {res = 0;T f = 1;char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {res = res * 10 +c - '0';c = getchar();}res *= f;
}
template<class T>
void out(T x) {if(x < 0) {x = -x;putchar('-');}if(x >= 10) {out(x / 10);}putchar('0' + x % 10);
}
char s[3000006];
int L,lcp[3000006];
bool cmp(int l0,int r0,int l1,int r1) {if(r0 < l0) return true;if(r1 < l1) return false;int l = min(lcp[l0],min(r1,r0 - l0 + 1));if(s[l0 + l] <= s[l1 + l]) return true;return false;
}
void Solve() {scanf("%s",s + 1);L = strlen(s + 1);lcp[1] = L;int p = 0,r = 0;for(int i = 2 ; i <= L ; ++i) {int t = 0;if(r >= i) t = min(r - i + 1,lcp[i - p + 1]);while(i + t <= L && s[t + 1] == s[i + t]) ++t;lcp[i] = t;if(r < i + t - 1) {p = i;r = i + t - 1;}}vector<int> f;f.clear();for(int i = 1 ; i <= L ; ++i) {vector<int> g;g.clear();g.pb(i);for(auto t : f) {while(g.size() && s[t + i - g.back()] < s[i]) g.pop_back();if(g.size() == 0 || s[t + i - g.back()] == s[i]) {while(g.size() && i - t + 1 <= 2 * (i - g.back() + 1)) g.pop_back();g.pb(t);}}f = g;int res = f[0];for(int j = 1 ; j < f.size() ; ++j) {if(cmp(f[j] + i - res + 1,res - 1,1,res - f[j] - 1)) res = f[j];}out(res);space;}enter;
}
int main(){
#ifdef ivorysifreopen("f1.in","r",stdin);
#endifSolve();
}
转载于:https://www.cnblogs.com/ivorysi/p/11011869.html
【LOJ】#3103. 「JSOI2019」节日庆典相关推荐
- LOJ #3103. 「JSOI2019」节日庆典
题意 给定字符串 \(S\) ,对于 \(S\) 的每个前缀 \(T\) 求 \(T\) 所有循环同构串的字典序最小的串,输出其起始下标.(如有多个输出最靠前的) \(|S| \le 3 \times ...
- 「JSOI2019」节日庆典 (Z-Algorithm)
传送门 考虑一个后缀 Si...nS_{i...n}Si...n,如果加上一个任意字符 ccc 可以使得 Si...ncS_{i...n}cSi...nc 为字典序最小的后缀,那么将其称为好后缀, ...
- 【LOJ3103】「JSOI2019」节日庆典
[题目链接] 点击打开链接 [思路要点] 考虑一种暴力维护候选点集的做法. 即,在字符串不断增长的同时,若已经可以确定 TiT_iTi 不再可能成为字典序最小的循环后缀,则将 iii 在候选点集中删 ...
- Loj #2568. 「APIO2016」烟花表演
Loj #2568. 「APIO2016」烟花表演 题目描述 烟花表演是最引人注目的节日活动之一.在表演中,所有的烟花必须同时爆炸.为了确保安全,烟花被安置在远离开关的位置上,通过一些导火索与开关相连 ...
- Loj #3111. 「SDOI2019」染色
Loj #3111. 「SDOI2019」染色 题目描述 给定 \(2 \times n\) 的格点图.其中一些结点有着已知的颜色,其余的结点还没有被染色.一个合法的染色方案不允许相邻结点有相同的染色 ...
- Loj #3055. 「HNOI2019」JOJO
Loj #3055. 「HNOI2019」JOJO JOJO 的奇幻冒险是一部非常火的漫画.漫画中的男主角经常喜欢连续喊很多的「欧拉」或者「木大」. 为了防止字太多挡住漫画内容,现在打算在新的漫画中用 ...
- LOJ#2230. 「BJOI2014」大融合
LOJ#2230. 「BJOI2014」大融合 题目描述 小强要在$N$个孤立的星球上建立起一套通信系统.这套通信系统就是连接$N$个点的一个树.这个树的边是一条一条添加上去的. 在某个时刻,一条边的 ...
- loj#2143. 「SHOI2017」组合数问题
loj#2143. 「SHOI2017」组合数问题 题目描述 Solution 考虑转化一下我们要求的东西. ∑i=0n(nkik+r)=∑i=0n(nki)[i≡r(modk)]\sum_{i=0} ...
- LOJ#2542. 「PKUWC2018」随机游走
LOJ#2542. 「PKUWC2018」随机游走 题目描述 Solution 去过一个点集中所有节点的期望时间不好求,考虑min−maxmin-maxmin−max容斥,转化为求第一次到达某一个点集 ...
最新文章
- jq常用过滤器_Jquery过滤器
- day06:02oracle体系结构_存储结构
- Linux文件属性和权限
- 记一次安装docker的坑
- 在Android Native层中创建Java虚拟机实例
- AIX进程监控与管理
- 构造函数内部原理 包装类
- Java String常用的数据类型转换
- 终极教程,带具体实验现象,1个GPIO控制2个LED显示4种状态,欢迎讨论!
- oracle ro,ORACLE学习笔记一
- mysql典型安装和自定义_Mysql8.0.19下载安装—windows版本自定义安装
- amd860k能装黑苹果吗_想用黑苹果?这些硬件不要买(内附支持列表)
- 网抑云音乐.ncm加密格式转换mp3
- EHS法律法规的收集渠道
- linux 3 4文件管理ppt,第8单元-Linux系统文件查找与文件管理.ppt
- EXCEL中输入的数字无法正常显示变成科学计数法
- 浙大吴飞与贾扬清经典十问!
- ie浏览器代理设置方法 怎么给IE浏览器设置代理?
- 一次 TLS SNI 问题
- Respones请求重定向
热门文章
- 2021考研历程总结
- 用Python分析张同学dy评论数据
- VMD读取trr轨迹的方法
- 计算机辅助教育中的教学评价,计算机辅助教育的评价.ppt
- c语言程序设计 长春大学,“C语言程序设计”双语教学改革研究.pdf
- C语言面试题汇总(华为公司)
- AUTOCAD学习笔记7:单相桥式整流滤波电路的绘制
- 德州仪器-TPS54302芯片(4.5V~28V降压至5V,抑制雷击浪涌电流,工作功率低功耗)
- poj 3323 Matrix Power Series (矩阵乘法 非递归形式)
- Python爬虫--智联招聘职位和公司信息爬取