【题意】

给定两个字符串,求二路归并后最小字典序的字符串。

【思路】

连接两个字符串后求出rank数组。通过比较rank数组进行二路归并。

【代码】

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define FOR(a,b,c) for(int a=b;a<=c;a++)
using namespace std; typedef long long ll;
const int N = 4e3+; ll read()
{
char c=getchar();
ll f=,x=;
while(!isdigit(c)) {
if(c=='-') f=-;
c=getchar();
}
while(isdigit(c))
x=x*+c-'',
c=getchar();
return x*f;
} int s[N];
int t[N],t2[N],c[N],sa[N],rank[N]; void build_sa(int m,int n)
{
int *x=t,*y=t2;
FOR(i,,m-) c[i]=;
FOR(i,,n-) c[x[i]=s[i]]++;
FOR(i,,m-) c[i]+=c[i-];
for(int i=n-;i>=;i--) sa[--c[x[i]]]=i;
for(int k=;k<=n;k<<=) {
int p=;
FOR(i,n-k,n-) y[p++]=i;
FOR(i,,n-) if(sa[i]>=k) y[p++]=sa[i]-k; FOR(i,,m-) c[i]=;
FOR(i,,n-) c[x[y[i]]]++;
FOR(i,,m-) c[i]+=c[i-];
for(int i=n-;i>=;i--) sa[--c[x[y[i]]]]=y[i]; swap(x,y);
p=; x[sa[]]=;
FOR(i,,n-)
x[sa[i]]=y[sa[i]]==y[sa[i-]]&&y[sa[i]+k]==y[sa[i-]+k]?p-:p++;
if(p>=n) break;
m=p;
}
}
void get_rank(int n)
{
FOR(i,,n-) rank[sa[i]]=i;
} int n,m,len,a[N],b[N],ans[N]; int main()
{
n=read();
FOR(i,,n-) a[i]=read(),s[len++]=a[i];
s[len++]=;
m=read();
FOR(i,,m-) b[i]=read(),s[len++]=b[i];
s[len++]=; build_sa(,len);
get_rank(len); int p1=,p2=,tot=;
while(p1<n || p2<m) {
if(p1>=n) printf("%d ",b[p2++]);
else if(p2>=m) printf("%d ",a[p1++]);
else {
if(rank[p1]<rank[n++p2]) printf("%d ",a[p1++]);
else printf("%d ",b[p2++]);
}
}
return ;
}

最新文章

  1. Java环境环境配置
  2. git 使用笔记
  3. 演化理解 Android 异步加载图片
  4. CodeForces 300C 最短路
  5. hdu4681String
  6. C语言中.h和.c文件解析(很精彩)
  7. LinkedList和ArrayList的区别
  8. fastclick 源码阅读备份
  9. 简简单单的Vue3(插件开发,路由系统,状态管理)
  10. luogu P3952 时间复杂度 模拟
  11. asp.net无限递归
  12. 初见Hadoop—- 搭建MyEclipse 访问HDFS 上的文件
  13. java框架之springmvc
  14. QML用Qt.labs.settings实现保存用户设置
  15. 步步为营-57-JQuery练习题
  16. 十分钟内在Ubuntu系统上搭建Mono开发环境(Mono软件Ubuntu系统国内镜像源、Mono国内镜像源)
  17. 网络Socket编程UDP协议例子
  18. (转)Go和HTTPS
  19. 隐藏windows任务栏中的窗口显示
  20. Sublime Text 3.1.1 Build 3176 注册码破解

热门文章

  1. URLEncode转json
  2. iOS 中有用的开源库
  3. 语言基础:C#输入输出与数据类型及其转换
  4. (step4.3.5)hdu 1501(Zipper——DFS)
  5. JVM学习笔记(一)------基本结构
  6. android的helloworld工程目录学习
  7. BZOJ 3143 游走(高斯消元)
  8. Android开发之MD5加密
  9. C++ STL之list容器的基本操作
  10. 图表框架HelloCharts(2)柱状图