【POJ 3623】 Best Cow Line, Gold (后缀数组)
【题意】

【分析】
后缀数组水题,嗯,不认真看输出像我一样就会被坑。。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
#define Maxn 300010 char ss[Maxn],s[Maxn*];
int a[Maxn*];
int len,n; int Rs[Maxn*],rk[Maxn*],sa[Maxn*],wr[Maxn*],y[Maxn*];
void get_sa(int m)
{
for(int i=;i<=len;i++) rk[i]=a[i];
for(int i=;i<=m;i++) Rs[i]=;
for(int i=;i<=len;i++) Rs[rk[i]]++;
for(int i=;i<=m;i++) Rs[i]+=Rs[i-];
for(int i=len;i>=;i--) sa[Rs[rk[i]]--]=i; int p=,ln=;
while(p<len)
{
int k=;
for(int i=len-ln+;i<=len;i++) y[++k]=i;
for(int i=;i<=len;i++) if(sa[i]>ln) y[++k]=sa[i]-ln;
for(int i=;i<=len;i++) wr[i]=rk[y[i]]; for(int i=;i<=m;i++) Rs[i]=;
for(int i=;i<=len;i++) Rs[wr[i]]++;
for(int i=;i<=m;i++) Rs[i]+=Rs[i-];
for(int i=len;i>=;i--) sa[Rs[wr[i]]--]=y[i]; p=;
for(int i=;i<=len;i++) wr[i]=rk[i];
for(int i=len+;i<=len+len;i++) wr[i]=;
rk[sa[]]=;
for(int i=;i<=len;i++)
{
if(wr[sa[i]]!=wr[sa[i-]]||wr[sa[i]+ln]!=wr[sa[i-]+ln]) p++;
rk[sa[i]]=p;
}
m=p,ln*=;
}
} /*int height[Maxn];
void get_height()
{
int k=0;
for(int i=1;i<=len;i++) if(sa[i]!=1)
{
int j=sa[rk[i]-1];
if(k) k--;
while(a[i+k]==a[j+k]) k++;
height[rk[i]]=k;
}
}*/ int ans[Maxn]; int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%s",s);
a[i]=s[]-'A'+;
}
// ans[n+1]=28;
len=*n;
for(int i=;i<=n;i++) a[len-i+]=a[i];
get_sa();
// get_height();
int l=,r=n;
for(int i=;i<=n;i++)
{
if(rk[l]<=rk[len-r+]) ans[i]=a[l++];
else ans[i]=a[r--];
}
for(int i=;i<=n;i++)
{
printf("%c",ans[i]+'A'-);
if(i%==) printf("\n");
}
printf("\n");
return ;
}
坑爹的poj改数据规模也不说一声。。
2016-11-03 09:52:49
【POJ 3623】 Best Cow Line, Gold (后缀数组)的更多相关文章
- poj 3623 Best Cow Line, Gold 后缀数组 + 贪心
题目链接 题目描述 对于一个给定的字符串,可以从左右两端取字符,依次排列构成一个新的字符串. 求可能构成的字符串中字典序 最小的一个. 例:ACDBCB -> ABCBCD 思路 参考自 xue ...
- poj 3623 Best Cow Line, Gold
题目不算难,但是不认真想的话很容易wa,我就是wa了多次才意识到自己想法存在的缺陷. 相同的时候往后找知道出现不相同时,只能判断出当前字符的优先顺序. 这个题目如果朴素的按照这种方法做的话复杂度其实是 ...
- POJ3623:Best Cow Line, Gold(后缀数组)
Description FJ is about to take his N (1 ≤ N ≤ 30,000) cows to the annual"Farmer of the Year&qu ...
- POJ 3623 Best Cow Line, Gold(字符串处理)
题意:给你一个字符串,让你重新排列,只能从头或者尾部取出一个放到新字符串队列的最后.按照字典序. 解决方法:比较前后两个的大小,谁小输出谁,相等,就往当中比来确定当前应该拿最前面的还是最后面的,如果再 ...
- HDU 3623 Best Cow Line, Gold(模拟,注意思路,简单)
题目 POJ 3617 和 这道题题目一样,只是范围稍稍再小一点. //模拟试试 #include<stdio.h> #include<string.h> #include&l ...
- poj 2774 最长公共子串 后缀数组
Long Long Message Time Limit: 4000MS Memory Limit: 131072K Total Submissions: 25752 Accepted: 10 ...
- P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold 解题报告
P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold 题意 给一个字符串,每次可以从两边中的一边取一个字符,要求取出的字符串字典序最小 可以Hash+二分 也可以S ...
- POJ 3617 Best Cow Line(最佳奶牛队伍)
POJ 3617 Best Cow Line Time Limit: 1000MS Memory Limit: 65536K [Description] [题目描述] FJ is about to t ...
- P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold
P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold我比赛的时候A了,luogu上25分,QAQ,又憨又傻的200+代码,我为什么要干电脑干的事情,无语了.如果左边 ...
- POJ 3617 Best Cow Line ||POJ 3069 Saruman's Army贪心
带来两题贪心算法的题. 1.给定长度为N的字符串S,要构造一个长度为N的字符串T.起初,T是一个空串,随后反复进行下面两个操作:1.从S的头部删除一个字符,加到T的尾部.2.从S的尾部删除一个字符,加 ...
随机推荐
- Nginx高性能服务器安装、配置、运维 (5) —— Nginx虚拟主机配置
六.Nginx虚拟主机配置 建立基于域名的虚拟主机: (1)建立基于域名的虚拟主机配置文件(以abc.com为例): (2)更改虚拟主机配置文件: 更改配置如下(更改部分即可): server { l ...
- C#里面比较时间大小三种方法
1.比较时间大小的实验 string st1="12:13";string st2="14:14";DateTime dt1=Convert.ToDateTim ...
- Virtual Studio C++ Version Macro - _MSC_VER
MSVC++ (Visual Studio ) MSVC++ (Visual Studio ) MSVC++ (Visual Studio ) MSVC++ (Visual Studio ) MSVC ...
- WPFX名称空间
1:x名称空间里的成员是专门写给xaml编译器看,用来引导xaml编译器把xaml代码编译成CLR代码的.(x仅仅是xaml的首字母). 2:attribute 是语言层面的东西,是给编译器看的,Pr ...
- QT5新手上路(1)安装
这几天学了一下windows下的QT,也不算什么心得吧,就是谈一下我的做法.希望看到这篇随笔的菜鸟们略有所得,少走弯路. 闲话少说,先说安装.首先是选版本,我用的是qt-opensource-wind ...
- Google Test Frame 简单使用例子
1 序言——为什么折腾Google Test 被逼无奈的. 最近研究google开源的基于列存储的数据库查询引擎supersonic源码.初略的浏览了一遍代码,竟然没有main函数,顿时惊讶的目瞪口呆 ...
- YII 开启URL伪静态
1.开启apache的mode_rewrite模块 去掉LoadModule rewrite_module modules/mod_rewrite.so前的“#”符号 确保<Directory ...
- linux运维工程师,必须掌握以下几个工具
本人是linux运维工程师,对这方面有点心得,现在我说说要掌握哪方面的工具吧说到工具,在行外可以说是技能,在行内我们一般称为工具,就是运维必须要掌握的工具.我就大概列出这几方面,这样入门就基本没问题了 ...
- 解决DataGridView.DataSource重复赋值而不显示问题
List<Person> list=new List<Person>(); ;i<;i++) { list.Add(new Person(){........}) } d ...
- ruby环境sass编译中文出现Syntax error: Invalid GBK character错误解决方法
sass文件编译时候使用ruby环境,无论是界面化的koala工具还是命令行模式的都无法通过,真是令人烦恼. 容易出现中文注释时候无法编译通过,或者出现乱码,找了几天的解决方法终于解决了. 这个问题的 ...