【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的尾部删除一个字符,加 ...
随机推荐
- Unity3D 之UGUI 滑动条(Slider)
这里来讲解下UGUI 滑动条(Slider)的用法 控件下面有三个游戏对象 Background -->背景 Fill Area --> 前景区域 Handle Slide Area -- ...
- (转)ASP.NET禁用刷新重复提交Backspace键
在网页制作中,由于Backspace键可以回退到上一个网页,利用了缓存的数据,从而导致一些错误发生.浏览器的后退按钮使得我们能够方便地返回以前访问过的页面,它无疑非常有用.但有时候我们不得不关闭这个功 ...
- 学会用Reflector调试我们的MVC框架代码
我们知道,现在能调试.net程序通常有两个,第一个是ILSpy,还是一个是Reflector,这两个小反编译软件算是我们研究底层代码中所拥有的一把 锋利小尖刀~~~,比如你看到的ILSpy这样的界面图 ...
- 转载---SQL Server XML基础学习<2>之--FOR XML AUTO/RAW
本文主要介绍FOR XML 的 AUTO 模式和 RAW 模式 --AUTO 模式将查询结果以嵌套 XML 元素的方式返回.这不能较好地控制从查询结果生成的 XML 的形式. --如果要生成简单的层次 ...
- pageContext.request.contextPath
jsp:<c:set var="ctxStatic" value="${pageContext.request.contextPath}"/>嵌套d ...
- Use excel Macro export data from database
Sub DownLoadMacro() '定义过程名称 Dim i As Integer, j As Integer, sht As Worksheet 'i,j为整数变量:sht 为excel工作表 ...
- [linux] 系统管理常用命令
1.查看某个软件是否安装: rpm -qa|grep software_name 2.top命令,显示系统的动态视图,q退出 3.ps aux|grep process_name 显示正在运行的进程 ...
- java新手笔记4 数组
1.数组 import java.util.Random; public class ArrayDemo1 { public static void main(String[] args) { int ...
- jQuery 常用代码集锦
1. 选择或者不选页面上全部复选框 var tog = false; // or true if they are checked on load $('a').click(function() { ...
- windows server 2003 取消登录Ctrl+Alt+delete
安装Windows Server 2003操作系统的, 在console登录默认要先按下Ctrl+Alt+Delete组合键然后才弹出登录对话框 要取消这个限制的方法是: 点击 “开始-->运行 ...