【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 1200010 using 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[ ...
随机推荐
- Swift-存储属性,计算属性,类属性
//类的属性定义 class Student: NSObject { // 定义属性 // 定义存储属性 var age : Int = var name :String? var mathScore ...
- JDK1.8最新特性--Lambda表达式(重点)
一个旧版本JDK简单匿名类的用例如下所示: // Java 8之前: JButton show = new JButton("Show"); show.addActionListe ...
- php 单文件测试代码时必加入的代码
有时候为了解决BUG,需要测试一些函数或代码最终实现的效果,来排除一些影响因素.这时候需要把代码单独拎出来,放在一个php单文件中来测试.在头部最好加上三句代码如下: <?php ini_set ...
- Struts创建流程
1.启动服务,加载web.xml 并实例化StrutsPrepareAndExecuteFilter过滤器 2.在实例化StrutsPrepareAndExecuteFilter的时候会执行过滤器中的 ...
- CODE FESTIVAL 2016 qualA Grid and Integers
划年代久远的水 题意 有一个R*C的棋盘,要求在每个格子上填一个非负数,使得对任意一个2*2的正方形区域,左上角和右下角的数字之和等于左下角和右上角的数字之和.有一些格子已经被填上了数字,问现在能否满 ...
- Android四大组件之contentProvider
Activity,Service,broadcast and Contentprovider android 4 大组件. ContentProvider:使用: public class Image ...
- 黑客帝国雨效果JS
黑客帝国雨效果JS. <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- Python下json中文乱码解决办法
json.dumps在默认情况下,对于非ascii字符生成的是相对应的字符编码,而非原始字符,只需要 #coding=utf8 import json js = json.loads('{" ...
- Codeforces Round #431
我太菜啦 A 一道斯波题,我想了一会儿后写了dp,其实if就好了 B做法很一眼,但有一些细节,分类一下就好了 C一直在想dp,挂机30分钟,后来dp来模拟分层图状态扩展的过程 D不会 然后发现room ...
- MFC中ON_COMMAND,ON_MESSAGE,ON_NOTIFY的区别
原文链接地址:https://blog.csdn.net/sufwei/article/details/3635489 ON_COMMAND //用来响应相应工具栏和菜单栏的命令WM_COMMAND, ...