【BZOJ2882】【字符串的最小表示】工艺
题目描述
小敏和小燕是一对好朋友。他们正在玩一种神奇的游戏,叫Minecraft。他们现在要做一个由方块构成的长条工艺品。但是方块现在是乱的,而且由于机器的要求,他们只能做到把这个工艺品最左边的方块放到最右边。他们想,在仅这一个操作下,最漂亮的工艺品能多漂亮。两个工艺品美观的比较方法是,从头开始比较,如果第i个位置上方块不一样那么谁的瑕疵度小,那么谁就更漂亮,如果一样那么继续比较第i+1个方块。如果全都一样,那么这两个工艺品就一样漂亮。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#define INF 1000000007#define N 1200010using namespace std;int n,a[N],s[N],tmp[N],rank[N],sa[N];void suffix_array(){ int sz=N; for (int i=0;i<n;i++) rank[i]=a[i]; for (int i=0;i<sz;i++) s[i]=0; for (int i=0;i<n;i++) s[rank[i]]++; for (int i=1;i<sz;i++) s[i]+=s[i-1]; for (int i=n-1;i>=0;i--) sa[--s[rank[i]]]=i; for (int j=1;j<=n/4;j*=2){ int p=0; for (int i=n-j;i<n;i++) tmp[p++]=i; for (int i=0;i<n;i++) if (sa[i]-j>=0) tmp[p++]=sa[i]-j; for (int i=0;i<sz;i++) s[i]=0; for (int i=0;i<n;i++) s[rank[i]]++; for (int i=1;i<sz;i++) s[i]+=s[i-1]; for (int i=n-1;i>=0;i--) sa[--s[rank[tmp[i]]]]=tmp[i]; p=0;tmp[sa[0]]=0; for (int i=1;i<n;i++){ int v0=sa[i-1],v1=sa[i],v00,v01; if (v0+j<n) v00=rank[v0+j];else v00=-1; if (v1+j<n) v01=rank[v1+j];else v01=-1; if (rank[v0]==rank[v1]&&v00==v01) tmp[sa[i]]=p;else tmp[sa[i]]=++p; } for (int i=0;i<n;i++) rank[i]=tmp[i]; }}int main(){ scanf("%d",&n); for (int i=0;i<4*n;i++) a[i]=N/2; for (int i=0;i<n;i++) scanf("%d",&a[i]),a[n+i]=a[i]; n*=4;suffix_array(); for (int i=sa[0];i-sa[0]<(n/4)-1;i++) printf("%d ",a[i]); printf("%d",a[sa[0]+(n/4)-1]); return 0;} |




|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;int n,a[600010];int main(){ scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",&a[i]),a[n+i]=a[i]; int i,j; for (i=1,j=2;j<=n;){ int k=0; while (j+k<=2*n&&a[i+k]==a[j+k]) k++; if (j+k>2*n) break; if (a[i+k]>a[j+k]) i=max(j,i+k+1),j=i+1;else j=j+k+1; } for (int j=0;j<n-1;j++) printf("%d ",a[j+i]);printf("%d",a[i+n-1]);} |
【BZOJ2882】【字符串的最小表示】工艺的更多相关文章
- POJ 2406 Power Strings(字符串的最小循环节)
题目链接:http://poj.org/problem?id=2406 题意:确定字符串最多是多少个相同的字串重复连接而成的 思路:关键是找到字符串的最小循环节 code: #include < ...
- kmp的next数组的运用(求字符串的最小循环节)
hdu3746 Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- POJ 1509 Glass Beads 后缀自动机 模板 字符串的最小表示
http://poj.org/problem?id=1509 后缀自动机其实就是一个压缩储存空间时间(对节点重复利用)的储存所有一个字符串所有子串的trie树,如果想不起来长什么样子可以百度一下找个图 ...
- 字符串的最小最大表示法O(n)
以下介绍内容内容转自:http://blog.csdn.net/zy691357966/article/details/39854359 网上看了这篇文章后还是感觉有些地方讲的没有详细的证明所以添加了 ...
- UVA.455 Periodic Strings(字符串的最小周期)
Periodic Strings 模板 题意分析 判断字符串的最小周期 代码总览 /* Title:UVA.455 Author:pengwill Date:2016-12-16 */ #includ ...
- hnuun 11544 小明的烦恼——找字符串(求环形字符串的最小最大字典序)
http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11544&courseid=0 最小最大表示法: 求环 ...
- Leetcode之动态规划(DP)专题-712. 两个字符串的最小ASCII删除和(Minimum ASCII Delete Sum for Two Strings)
Leetcode之动态规划(DP)专题-712. 两个字符串的最小ASCII删除和(Minimum ASCII Delete Sum for Two Strings) 给定两个字符串s1, s2,找到 ...
- Java实现 LeetCode 712 两个字符串的最小ASCII删除和(最长公共子串&&ASCII值最小)
712. 两个字符串的最小ASCII删除和 给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和. 示例 1: 输入: s1 = "sea", s2 ...
- HDU 4162 Shape Number(字符串,最小表示法)
HDU 4162 题意: 给一个数字串(length <= 300,000),数字由0~7构成,求出一阶差分码,然后输出与该差分码循环同构的最小字典序差分码. 思路: 第一步是将差分码求出:s[ ...
随机推荐
- jQuery的2把利器
<!-- $是一个函数,首先是给window添加$,然后该值是一个函数,函数返回的值是对象.1. jQuery核心函数 * 简称: jQuery函数($/jQuery) * jQuery库向外直 ...
- "数学口袋精灵"bug
首先要部署这个app项目就是第一步: 一.前提下载并安装JDK 在线图解:手把手教你安装JDK http://www.lvtao.net/server/windows-setup-jdk.h ...
- 0302思考&回答
看完这两个网页,我们可以看出it行业始终是一门热门行业,在现在这个人潮汹涌的人才市场,面对严峻的就业形势,我们应该拿什么去参见招聘?人多而工作职位有限,这警醒我们必须拥有一技之长,否则则会被淘汰.如果 ...
- Android定位测试(深坑)
问题:我们是一个海外app,市场部去马来西亚打开那边的市场,发现了一个问题,就是我们的app定位有问题,还是成都的定位,主要原因是在马来西亚使用这个app,请求中带的经纬度参数是成都的,导致服务器返回 ...
- Tomcat+JDK安装和配置
Tomcat+JDK安装和配置 一.打开FlashFXP软件,建立连接,选择需要的包,右击传输到 /home/guest中 二.进入到:cd /home/guest中,对tomcat包进行解压 三.将 ...
- 【JavaScript】checkBox的多选行<tr>信息获取
页面的列表table显示(后台model.addAttribute("page", page);传来page信息,page通过foreach标签迭代展示表格数据): <!-- ...
- BZOJ4892 Tjoi2017dna(后缀数组)
对每个子串暴力匹配至失配三次即可.可以用SA查lcp.然而在bzoj上被卡常了.当然也可以二分+哈希或者SAM甚至FFT. #include<iostream> #include<c ...
- Debug快捷键
Debug快捷键 1. F5单步调试进入函数内部2. F6单步调试不进入函数内部3. F7由函数内部返回到调用处4. F8一直执行到下一个断点5. F11 重新运行debug
- 【BZOJ3028】食物(生成函数)
[BZOJ3028]食物(生成函数) 题面 一个人要带\(n\)个物品,共有\(8\)种物品,每种的限制分别如下: 偶数个;0/1个;0/1/2个;奇数个; 4的倍数个;0/1/2/3个;0/1个;3 ...
- 基于 HTML5 的人脸识别技术
基于 HTML5 的人脸识别技术 https://github.com/auduno/headtrackr/