【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[ ...
随机推荐
- [mysqld_safe]centos7 mysql 安装与配置
查资料发现是CentOS 7 版本将MySQL数据库软件从默认的程序列表中移除,用mariadb代替了. 有两种解决办法: 安装mariadb [root@a ~]# yum install mar ...
- CCF——相邻数对201409-1
问题描述 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1. 输入格式 输入的第一行包含一个整数n,表示给定整数的个数. 第二行包含所给定的n个整数. 输出格式 输出一个整数,表示值正好 ...
- 2nd 词频统计更新
词频统计更新 实现功能:从控制台输入文件路径,并统计单词总数及不重复的单词数,并输出所有单词词频,同时排序. 头文件 #include <stdio.h> #include <std ...
- 【leetcode】198.HouseRobber
198.HouseRobber You are a professional robber planning to rob houses along a street. Each house has ...
- linux的一些机制Signal, Fork,
signal(SIGCHLD, SignalHandler); 注册软中断,对应的api close(socket); ret=fork(): 父进程,返回子进程的pid. 子进程返回0, 出错返回& ...
- 数组去重复及记录重复个数(以及遍历map的四种方法)
private static void check(String[] array) { // 字符串数组中,含有不重复的字符串有哪些?每一个重复的个数 Map<String,Integer> ...
- 碰到的一个新的东西——yaml,果然是个好东西
yaml 基础语法可以看阮一峰大大的博客[yaml 语言教程] 看过了 xml 和 json之后,看一眼这个 yaml,觉得少写了好多东西,不用再去找层级关系了, yaml 直接一目了然,没有了尖括号 ...
- Strus默认跳转方式是请求转发 地址栏不变 与javaweb的内部转发一样
Strus默认跳转方式是请求转发 地址栏不变 与javaweb的内部转发一样
- 【明哥报错簿】之【HTTP Status 500 - Servlet.init() for servlet mvc-dispatcher threw exception】
报错:java.lang.NoClassDefFoundError: /factory/config/EmbeddedValueResolver spring或者jdk的问题,解决办法:spring3 ...
- 为什么我再也不想和 Google HR 交谈了
英文:yegor256,编译:伯乐在线/心灵是一棵开花的树 http://blog.jobbole.com/110340/ [伯乐在线导读]: 关于程序员面试时现场写代码,估计大家还记得 2015 年 ...