【题意】

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

【思路】

连接两个字符串后求出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 ;
}

bzoj 4278 [ONTAK2015]Tasowanie(SA,贪心)的更多相关文章

  1. BZOJ 4278: [ONTAK2015]Tasowanie 后缀数组 + 贪心 + 细节

    Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in", "r", stdin ...

  2. ●BZOJ 4278 [ONTAK2015]Tasowanie

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4278 题解: 把两个串连接起来,用一个大数连接(必须要用大数).倍增算法求出后缀排名.然后两 ...

  3. bzoj 4278 [ONTAK2015]Tasowanie——后缀数组

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4278 因为每次要放后缀较小的那个,所以把两个序列放在一起排序吧.改一改模板. 其实要改的地方 ...

  4. BZOJ 4278 [ONTAK2015]Tasowanie (后缀数组)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4278 题解: 居然把后缀数组写成n^2的..我真厉害.. 想了无数种方法,最后发现就是 ...

  5. BZOJ 4278: [ONTAK2015]Tasowanie (后缀数组 / 二分+hash)

    直接归并,然后如果哪边的后缀字典序比较小就去哪边,然后就可以后缀数组 博客传送门- 但是本蒟蒻不会后缀数组 Upd:Upd:Upd:现在会了233.一道差不多的题:BZOJ 1692: [Usaco2 ...

  6. bzoj 4278 [ONTAK2015]Tasowanie

    给出两个字符串 A B 让我们对其二路归并 求出能够归并出的最小字典序. 考虑后缀数组 不难发现我们将B直接连在A上会出现问题 问题是 A串剩下的和B串完全相同了 那么此时比大小就会用到B的部分 这是 ...

  7. [ONTAK2015]Tasowanie

    [ONTAK2015]Tasowanie 题目大意: 给你两个长度分别为\(n(n\le2\times10^5)\)的序列\(A,B\),将\(A,B\)进行二路归并,使得最后得到的序列字典序最小.求 ...

  8. 【BZOJ4278】[ONTAK2015]Tasowanie 后缀数组

    [BZOJ4278][ONTAK2015]Tasowanie Description 给定两个数字串A和B,通过将A和B进行二路归并得到一个新的数字串T,请找到字典序最小的T. Input 第一行包含 ...

  9. bzoj 4278 Tasowanie 后缀数组+贪心

    题目大意 给定两个数字串A和B,通过将A和B进行二路归并得到一个新的数字串T,请找到字典序最小的T.\(len \leq 200000\) 题解 我们从归并排序的角度去想,每次把两者之一较小的取出来 ...

随机推荐

  1. MVC下基于DotNetOpenAuth 实现SSO单点登录

    具体官网可以查看:http://dotnetopenauth.net/,托管地址:https://github.com/DotNetOpenAuth/DotNetOpenAuth 可能需要FQ 博客园 ...

  2. bind搭建(二)反向解析

    我们在上一节已经知道了怎么建立DNS的服务器端,可以实现了域名到IP之间的转换.那么好我们现在就来了解一下如何实现反向的DNS解析,也就是IP到域名的映射. 步骤如下: l  在/etc/named中 ...

  3. How to learn linux device driver

    To learn device driver development, like any other new knowledge, the bestapproach for me is to lear ...

  4. PHP5.4连接sqlserver

    1.下载微软的php连接驱动:SQLSRV30.EXE(5.4对应,后面的native client要用2012)/SQLSRV20.EXE(5.3对应,native client要用2008)/SQ ...

  5. POJ 2409 Let it Bead(polay计数)

    题目链接:http://poj.org/problem?id=2409 题意:给出一个长度为m的项链,每个珠子可以用n种颜色涂色.翻转和旋转后相同的算作一种.有多少种不同的项链? 思路: (1) 对于 ...

  6. 【Todo】深入理解Javascript系列

    真的很好,要看 http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html

  7. Android百度地图

        帖子   热搜: 二维码 聊天 二维码扫描 传感器 游戏 定位 手势绘图 小项目 相框 绘图 涂鸦 拨打电话 记事本 定时器 通话记录 短信群发 listview 音乐播放器 项目例子 百度地 ...

  8. bzoj4154

    一开始读错题,各种不会做,后来发现染色只是染孩子…… 那不就简单了吗……注意这题是允许离线的 染色如果没有距离限制,它就是个dfs序 距离限制怎么做呢?我们考虑扩展一维变成二维的问题,将每个点变为二维 ...

  9. Qt之自定义界面(窗体缩放)

    简述 通过前两节内容,我们实现了自定义窗体的移动,以及自定义标题栏-用来显示窗体的图标.标题,以及控制窗体最小化.最大化.关闭. 在这之后,我们还缺少窗体的缩放-当鼠标移动到窗体的边框-左.上.右.下 ...

  10. bzoj1355: [Baltic2009]Radio Transmission

    将原串看成是循环节的后缀加上若干个循环节,那么考虑每种情况都会发现n-next[n]就是最小循环节.(一开始总输出n...然后发现build_next连调用都没有,%%% #include<cs ...