[后缀数组 贪心] BZOJ 4278 [ONTAK2015]Tasowanie
来源:互联网 发布:随机过程 何书元淘宝 编辑:程序博客网 时间:2024/06/10 21:58
两个指针 显然小的那个先放 如果一样 比后一个 再一样 再后 然后就转化成比较后缀的字典序了
#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}inline void read(int &x){ char c=nc(),b=1; for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1; for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b;}const int N=400005;int n1,n2;int n,a[N];int t1[N],t2[N],c[N],sa[N];int rank[N];inline void SA(int *a,int m){ int *x=t1,*y=t2; for (int i=1;i<=m;i++) c[i]=0; for (int i=1;i<=n;i++) c[x[i]=a[i]]++; for (int i=1;i<=m;i++) c[i]+=c[i-1]; for (int i=n;i;i--) sa[c[x[i]]--]=i; for (int k=1;k<=n;k<<=1){ int p=0; for (int i=n-k+1;i<=n;i++) y[++p]=i; for (int i=1;i<=n;i++) if (sa[i]>k) y[++p]=sa[i]-k; for (int i=1;i<=m;i++) c[i]=0; for (int i=1;i<=n;i++) c[x[y[i]]]++; for (int i=1;i<=m;i++) c[i]+=c[i-1]; for (int i=n;i;i--) sa[c[x[y[i]]]--]=y[i]; swap(x,y); x[sa[1]]=1; p=1; for (int i=2;i<=n;i++) x[sa[i]]=(y[sa[i]]==y[sa[i-1]] && y[sa[i]+k]==y[sa[i-1]+k])?p:++p; if (p>=n) break; m=p; }}int main(){ freopen("t.in","r",stdin); freopen("t.out","w",stdout); read(n1); for (int i=1;i<=n1;i++) read(a[i]); a[n1+1]=1001; read(n2); for (int i=1;i<=n2;i++) read(a[i+n1+1]); n=n1+1+n2; SA(a,1001); for (int i=1;i<=n;i++) rank[sa[i]]=i; int p=1,q=1; while (p<=n1 || q<=n2) if (p>n1) printf("%d ",a[(q++)+n1+1]); else if (q>n2) printf("%d ",a[p++]); else if (rank[p]<rank[q+n1+1]) printf("%d ",a[p++]); else printf("%d ",a[(q++)+n1+1]); return 0;}
0 0
- BZOJ 4278: [ONTAK2015]Tasowanie|后缀数组|贪心
- [后缀数组 贪心] BZOJ 4278 [ONTAK2015]Tasowanie
- 4278: [ONTAK2015]Tasowanie 后缀数组+贪心
- BZOJ 4278 ONTAK2015 Tasowanie 后缀数组
- bzoj 4278: [ONTAK2015]Tasowanie (后缀数组)
- bzoj 4278: [ONTAK2015]Tasowanie (后缀数组)
- BZOJ 4278: [ONTAK2015]Tasowanie 后缀数组
- bzoj 4278: [ONTAK2015]Tasowanie&bzoj 1692: [Usaco2007 Dec]队列变换 后缀数组+贪心
- [BZOJ4278][ONTAK2015]Tasowanie(后缀数组+贪心)
- 【bzoj4278】 [ONTAK2015]Tasowanie 后缀数组
- [BZOJ4278] [ONTAK2015]Tasowanie
- bzoj4278: [ONTAK2015]Tasowanie
- BZOJ 1692 队列变换 贪心+后缀数组
- BZOJ 4245: [ONTAK2015]OR-XOR|进制类|贪心
- bzoj 4245 [ONTAK2015]OR-XOR 贪心
- BZOJ 4245 [ONTAK2015]OR-XOR 贪心 思维
- 【BZOJ 4245】[ONTAK2015]OR-XOR 二进制贪心
- BZOJ 1692 [Usaco2007 Dec]队列变换 贪心+后缀数组
- HDOJ 2083 简易版之最短距离
- 命令行下访问Android的sqlite数据库
- 【Python】(一)初见
- 2017暑期实习招聘-产品经理-腾讯IMG(2)
- android service不被杀死
- [后缀数组 贪心] BZOJ 4278 [ONTAK2015]Tasowanie
- 小球滑动已八卦方式滑进滑出、可以在外圈滑动的BallSpinningView
- linux设备驱动之LED驱动测试
- POJ 1724 ROADS(领接链表的BFS+优先队列)
- URAL 2067 Friends and Berries
- puppet 运维工具基础<三>
- (POJ 2299)Ultra-QuickSort 树状数组求逆序对数 + 离散化
- ip路由学习笔记(一)
- 面试中java问过的问题