【题意】

  

【分析】

  后缀数组水题,嗯,不认真看输出像我一样就会被坑。。

 #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 (后缀数组)的更多相关文章

  1. poj 3623 Best Cow Line, Gold 后缀数组 + 贪心

    题目链接 题目描述 对于一个给定的字符串,可以从左右两端取字符,依次排列构成一个新的字符串. 求可能构成的字符串中字典序 最小的一个. 例:ACDBCB -> ABCBCD 思路 参考自 xue ...

  2. poj 3623 Best Cow Line, Gold

    题目不算难,但是不认真想的话很容易wa,我就是wa了多次才意识到自己想法存在的缺陷. 相同的时候往后找知道出现不相同时,只能判断出当前字符的优先顺序. 这个题目如果朴素的按照这种方法做的话复杂度其实是 ...

  3. 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 ...

  4. POJ 3623 Best Cow Line, Gold(字符串处理)

    题意:给你一个字符串,让你重新排列,只能从头或者尾部取出一个放到新字符串队列的最后.按照字典序. 解决方法:比较前后两个的大小,谁小输出谁,相等,就往当中比来确定当前应该拿最前面的还是最后面的,如果再 ...

  5. HDU 3623 Best Cow Line, Gold(模拟,注意思路,简单)

    题目 POJ 3617 和 这道题题目一样,只是范围稍稍再小一点. //模拟试试 #include<stdio.h> #include<string.h> #include&l ...

  6. poj 2774 最长公共子串 后缀数组

    Long Long Message Time Limit: 4000MS   Memory Limit: 131072K Total Submissions: 25752   Accepted: 10 ...

  7. P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold 解题报告

    P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold 题意 给一个字符串,每次可以从两边中的一边取一个字符,要求取出的字符串字典序最小 可以Hash+二分 也可以S ...

  8. POJ 3617 Best Cow Line(最佳奶牛队伍)

    POJ 3617 Best Cow Line Time Limit: 1000MS Memory Limit: 65536K [Description] [题目描述] FJ is about to t ...

  9. P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold

    P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold我比赛的时候A了,luogu上25分,QAQ,又憨又傻的200+代码,我为什么要干电脑干的事情,无语了.如果左边 ...

  10. POJ 3617 Best Cow Line ||POJ 3069 Saruman's Army贪心

    带来两题贪心算法的题. 1.给定长度为N的字符串S,要构造一个长度为N的字符串T.起初,T是一个空串,随后反复进行下面两个操作:1.从S的头部删除一个字符,加到T的尾部.2.从S的尾部删除一个字符,加 ...

随机推荐

  1. JMS—事务管理

    Spring提供了一个JmsTransactionManager用于对JMS ConnectionFactory做事务管理.这将允许JMS应用利用Spring的事务管理特性.JmsTransactio ...

  2. Scala函数字面量简化写法

    Scala提供了多种方法来简化函数字面量中多余的部分,比如前面例子中filter方法中使用的函数字面量,完整的写法如下: (x :Int ) => x +1 首先可以省略到参数的类型,Scala ...

  3. 盘点 Github 所用到的开源项目

    http://www.php100.com/html/it/mobile/2014/0401/6736.html 在致力于开源事业的同时,Github也使用一些非常优秀的开源项目的来打造自己的平台与服 ...

  4. Eclipse搭建服务器

    一.首先,依次点击Window -->preferences-->Server-->Runtime environment -->add,再选择Apache,选择TOMcat的 ...

  5. php导出execl

    <?php function export_excel($items,$fields,$fields_array,$name) { /* * 调用方法示例 * $items = $this-&g ...

  6. xcode编译运行报错纪录(持续更新)

    ---恢复内容开始--- 1. Undefined symbols for architecture i386: "_deflate", referenced from: -[NS ...

  7. MVVM学习笔记

    MVVM学习笔记 1.MVVM的简介 MVVM模式是Model-View-ViewModel模式的简称,也就是由模型(Model).视图(View).视图模型(ViewModel),其目的是为了实现将 ...

  8. javascript BOM对象 第15节

    <html> <head> <title>浏览器对象</title> <script type="text/javascript&quo ...

  9. js 无刷新分页代码

    /** * 分页事件处理 */function paging(){ $("#firstPage").click(function(){ //首页 var pageNo = getP ...

  10. 时间处理得到UTC时间

    在工作过程遇到了时间处理的问题,因为需要统一将时间处理按照utc时间进行处理,因此,不能简单的通过系统运行直接得到时间的毫秒数,这样会在不同时区得到的值是不同的. import java.text.P ...