poj 3623 贪心,后缀数组
来源:互联网 发布:odbc导入sql 编辑:程序博客网 时间:2024/06/06 01:02
【题意】
给你一个字符串,现在要生成一个新的字符串,规则是每次从原字符串的头部或者尾部取一个字符放在新字符串的尾巴上。求字典序最小的新字符串。
【题解】
简单贪心,用后缀数组即可。
贡献了两个presantation error T_T
【代码】
#include <iostream>using namespace std;const int maxn=60010;int wa[maxn],wb[maxn],sa[maxn],rk[maxn],w[maxn],v[maxn];char s[maxn],ans[maxn];int n;int cmp(int* r,int a,int b,int l) { return r[a]==r[b] && r[a+l]==r[b+l]; } void da(char* s,int* sa,int n,int m) { int *x=wa,*y=wb,*t,i,j,p; for (i=0;i<m;i++) w[i]=0; for (i=0;i<n;i++) w[x[i]=s[i]]++; for (i=1;i<m;i++) w[i]+=w[i-1]; for (i=n-1;i>=0;i--) sa[--w[x[i]]]=i; for (j=1,p=1;p<n;j*=2,m=p) { for (p=0,i=n-j;i<n;i++) y[p++]=i; for (i=0;i<n;i++) if (sa[i]>=j) y[p++]=sa[i]-j; for (i=0;i<n;i++) v[i]=x[y[i]]; for (i=0;i<m;i++) w[i]=0; for (i=0;i<n;i++) w[v[i]]++; for (i=1;i<m;i++) w[i]+=w[i-1]; for (i=n-1;i>=0;i--) sa[--w[v[i]]]=y[i]; for (t=x,x=y,y=t,p=1,x[sa[0]]=0,i=1;i<n;i++) x[sa[i]]=cmp(y,sa[i-1],sa[i],j)?p-1:p++; } for (i=1;i<n;i++) rk[sa[i]]=i; } void calheight() { int i,j,k=0; }int main(){ freopen("pin.txt","r",stdin); freopen("pou.txt","w",stdout); int i,j,tot; scanf("%d\n",&n); for (i=0;i<n;i++) scanf("%c\n",&s[i]); s[n]='$'; for (i=n+1;i<n+n+1;i++) s[i]=s[n+n-i]; s[n+n+1]=0; da(s,sa,strlen(s)+1,128); tot=0; for (i=0,j=n+1;i<n && j<n+n+1;) { if (rk[i]<rk[j]) ans[tot++]=s[i++]; else ans[tot++]=s[j++]; if (tot==n) break; } for (i=0;i<tot;i++) { cout << ans[i]; if (i%80==79) cout << endl; } return 0;}
- poj 3623 贪心,后缀数组
- [贪心+后缀数组] poj 3623 Best Cow Line, Gold
- [后缀数组+贪心] poj 3518 Sequence
- 后缀数组+贪心+poj3623
- FZU 2267 贪心 后缀数组
- 后缀数组+贪心+隔板法
- poj 1743 后缀数组
- POJ 2758 后缀数组
- POJ 2774 后缀数组
- poj 2774 //后缀数组
- poj 3294 后缀数组
- poj 1743 后缀数组
- POJ 1743 (后缀数组)
- poj 3261 后缀数组
- poj 3693 (后缀数组)
- poj 3261 后缀数组
- poj 1743 后缀数组
- POJ 1743 后缀数组
- ....hbm.xml配置
- Erlang:如何动态切换多个版本的Module/Application
- CreateWaitableTimer和SetWaitableTimer函数
- jsp基础速成精华讲解
- RegQueryValueEx函数
- poj 3623 贪心,后缀数组
- Discovery & Annoucement
- gvim---配置自动代码提示
- RegSetValueEx和RegDeleteValue函数
- 微软暑期实习面试总结
- Android的全局键(home键/长按耳机键)详解【android源码解析八】
- RegOpenKeyEx和RegCreateKeyEx函数
- GetDiskFreeSpaceEx函数
- 同步、异步、阻塞和非阻塞的概念