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 ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
}

【LOJ】#3103. 「JSOI2019」节日庆典的更多相关文章

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

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

  2. Loj #3102. 「JSOI2019」神经网络

    Loj #3102. 「JSOI2019」神经网络 题目背景 火星探险队发现,火星人的思维方式与人类非常不同,是因为他们拥有与人类很不一样的神经网络结构.为了更好地理解火星人的行为模式,JYY 对小镇 ...

  3. 【LOJ】#3102. 「JSOI2019」神经网络

    LOJ#3102. 「JSOI2019」神经网络 首先我们容易发现就是把树拆成若干条链,然后要求这些链排在一个环上,同一棵树的链不相邻 把树拆成链可以用一个简单(但是需要复杂的分类讨论)的树背包实现 ...

  4. 【LOJ】#3101. 「JSOI2019」精准预测

    LOJ#3101. 「JSOI2019」精准预测 设0是生,1是死,按2-sat连边那么第一种情况是\((t,x,1) \rightarrow (t + 1,y,1)\),\((t + 1,y, 0) ...

  5. Loj #2568. 「APIO2016」烟花表演

    Loj #2568. 「APIO2016」烟花表演 题目描述 烟花表演是最引人注目的节日活动之一.在表演中,所有的烟花必须同时爆炸.为了确保安全,烟花被安置在远离开关的位置上,通过一些导火索与开关相连 ...

  6. Loj #2192. 「SHOI2014」概率充电器

    Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...

  7. Loj #3096. 「SNOI2019」数论

    Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...

  8. Loj #3093. 「BJOI2019」光线

    Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...

  9. Loj #3089. 「BJOI2019」奥术神杖

    Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...

随机推荐

  1. vue中修改第三方组件的样式不生效

    问题 在使用element-ui时,有时候想要修改组件内的样式,但不成功,例如 <div class="test"> <el-button>按钮</e ...

  2. 基础数据类型-字符串str

    什么是字符串? 单引号,双引号,三引号包裹的文本 在我们的代码中换行区别 单/双引号:‘a’\ 'b' 三引号:"""a b""" 索引 s ...

  3. svn 外部引用别的项目文件

    建立了一个文件目录E:\My\myproject 想在该目录下有一个文件夹引用别的工程的文件. 1.在E:\My\myproject 空白处右键属性. 2.点击Properties,弹出 3.点击ne ...

  4. manjaro 18.10 install soft

    1.添加新账户 useradd username新建账户; useradd -d /home/xxx -m xxx创建用户,并同时生成用户目录,不然账户无法正常启用; passwd username修 ...

  5. shell cat 用法

    cat命令的用途是连接文件或标准输入并打印. 1.命令格式:cat [选项] [文件]... 2.命令功能:cat主要有三大功能:1.一次显示整个文件:cat filename   --常用来显示文件 ...

  6. 使用pycharm发布python程序到ubuntu中运行

    前提条件: 1.ubuntu安装了vsftpd,可以参考:https://www.cnblogs.com/xienb/p/9322805.html 2.安装专业版pycharm 步骤: 1.新建一个P ...

  7. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_01-页面静态化需求分析

    上半部分就是静态化 业务流程如下: 1.获取模型数据 2.制作模板 3.对页面进行静态化 4.将静态化生成的html页面存放文件系统中 5.将存放在文件系统的html文件发布到服务器

  8. phpcms后台添加会员报v9_sso_member表缺失

    坑货..表前缀设置 两个地方都有 一个是默认的caches/configs/目录 还有个是phpsso_server/caches/configs/ 如果改了表前缀 这两个地方的database都要改 ...

  9. Crontab的格式说明

    第1列分钟1-59第2列小时1-23(0表示子夜)第3列日1-31第4列月1-12第5列星期0-6(0表示星期天)第6列要运行的命令 下面是crontab的格式:分 时 日 月 星期 要运行的命令 这 ...

  10. Nginx使用默认配置启动异常处理

    Ps1:错误问题:nginx: [error] OpenEvent("Global\ngx_reload_5988") failed (2: The system cannot f ...