bzoj 2882(最小表示法)
来源:互联网 发布:java变量初始化 编辑:程序博客网 时间:2024/06/03 22:38
传送门
问题:将原串复制一次接到尾部,找出构成的新串中长度为原串长度且字典序最小的串并输出。
自己也讲不清楚,只是意会。。。转一篇讲解。
O(n)求字符串最小表示法
P.S.此题还可以用后缀自动机解决,然而本蒟蒻并不会写orz。
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int MAXN=3e5+2;int a[MAXN<<1],n;inline int read() { int x=0,f=1;char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar(); return x*f;}inline int MR() { int i=0,j=1; for (int k;i<n&&j<n;) { for (k=0;a[i+k]==a[j+k];++k); if (k==n) return i; if (a[i+k]>a[j+k]) i+=k+1; else j+=k+1; if (i==j) ++j; } return i<j?i:j;}int main() {// freopen("bzoj 2882.in","r",stdin); n=read(); for (register int i=0;i<n;++i) a[i+n]=a[i]=read(); int pos=MR(); for (register int i=0;i<n-1;++i) printf("%d ",a[pos+i]); printf("%d\n",a[pos+n-1]); return 0;}
阅读全文
0 0
- bzoj 2882(最小表示法)
- bzoj 1398 &&bzoj 2882最小表示法
- 【BZOJ 2882】工艺 最小表示法
- BZOJ 2882: 工艺 最小表示法
- [BZOJ]2882 工艺 最小表示法
- BZOJ 2882 工艺 字典序最小的循环同构串(最小表示法 详解)
- BZOJ 2882 后缀数组/最小表示法 解题报告
- BZOJ 2176 Strange string 最小表示法
- bzoj 1398 项链 【最小表示法】
- BZOJ 2176: Strange string 最小表示法
- BZOJ 4484 [Jsoi2015] 最小表示
- bzoj 4484 [Jsoi2015]最小表示
- bzoj 4484: [Jsoi2015]最小表示
- BZOJ 2882 浅谈最小表示法后缀数组求解+线性求解
- [最小循环表示 后缀自动机 模板题] BZOJ 2882 工艺
- BZOJ 2176: Strange string【字符串最小表示法
- bzoj 2176: Strange string 字符串最小表示法
- BZOJ 1398: Vijos1382寻找主人 Necklace 字符串最小表示法
- mysql模糊查找英文可以查找中文不行(详细记录)
- 自己写的 傻瓜 插入排序
- SPring MVC 入门案例
- 【05】20行js代码实现的贪吃蛇小游戏
- NG机器学习week5 Neural Networks: Learning
- bzoj 2882(最小表示法)
- Springmvc @interface注解的使用
- Android View部分消失效果实现
- Spring学习笔记—高级特性
- 好玩的线上检测代码工具-codewars(1)
- 【Oracle】NUMBER类型理解
- hdu6115 Factory(树上最近公共祖先)
- 该是回归的时候了
- Jetty Runner的使用