poj 1147 Binary codes BWT压缩算法
来源:互联网 发布:js for in循环 编辑:程序博客网 时间:2024/04/20 19:19
题意:一个长度为N的01序列,会有N个不同的轮换(当然,字符相同,其中也可能会有相同的),将这N个不同轮换按字典序排
序,取排序后的每个轮换的最后一排,组成一个序列。题中给出压缩后的序列,求原始序列,输出的是字典序最小的那个序列。
思路:这题基于一个性质:在已经排序好的矩阵中,对于首位相同的两行,经过左移一位的操作后,形成的新的两行的先后次序不发
生改变。即:设i行在j行前面,i行左移一位变成p行,j左移一位后变成q行,p还是在q的前面。已知最后一列,那么我们可以知道一行
有几个零(cnt0个)几个一(cnt1个),那么我们自然能得到第一列,前cnt0个为零,之后cnt1个为一。由上述性质,第一列第i个零所在的
p行一定是转移到最后一列第i个零所在的q行,且q行的首位是是p行首位的后一位。那么我们利用性质即可得到行转移的数组next。
最后沿着next进行行转移,依次输出行的首位即为第一行,详见代码:
/********************************************************* file name: poj1147.cpp author : kereo create time: 2015年02月21日 星期六 18时08分02秒*********************************************************/#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<set>#include<map>#include<vector>#include<stack>#include<cmath>#include<string>#include<algorithm>using namespace std;typedef long long ll;const int sigma_size=26;const int N=100+50;const int MAXN=100000+50;const int inf=0x3fffffff;const double eps=1e-8;const int mod=1000000000+7;#define L(x) (x<<1)#define R(x) (x<<1|1)#define PII pair<int, int>#define mk(x,y) make_pair((x),(y))int n,cnt0,cnt1;int a[MAXN],num0[MAXN],num1[MAXN],next[MAXN];int main(){ while(~scanf("%d",&n)){ cnt0=cnt1=0; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); if(a[i]) cnt1++,num1[cnt1]=i; else cnt0++,num0[cnt0]=i; } for(int i=1;i<=n;i++){ if(i<=cnt0) next[i]=num0[i]; else next[i]=num1[i-cnt0]; } int k=1,ans; for(int i=1;i<=n;i++){ if(i == 1) printf("%d",ans=k<=cnt0 ? 0 : 1); else printf(" %d",ans=k<=cnt0 ? 0 : 1); k=next[k]; } printf("\n"); }return 0;}
0 0
- poj 1147 Binary codes BWT压缩算法
- poj 1147 Binary codes bwt压缩算法
- POJ 1147 Binary codes (BWT算法 很巧妙)
- poj 1147 BWT压缩方法
- BWT压缩算法
- poj 1147 Binary codes
- poj 1147 Binary codes
- POJ 1147 Binary Codes 杂题
- poj 杂题 - 1147 Binary codes
- POJ 1147 Binary codes 笔记
- Burrows-Wheeler 压缩(转换)算法(BWT)
- poj 1147:Binary codes (置换群)
- BWT算法
- BWT压缩算法及FM搜索算法详解
- BWT(压缩与还原)
- pku 1147 Binary codes 【规律】
- BWT数据压缩算法
- bwt - search 算法
- OC面向对象—封装
- OC面向对象—继承
- OC面向对象—多态
- OC语言构造方法
- OC语言@property @synthesize和id
- poj 1147 Binary codes BWT压缩算法
- Foundation框架—结构体
- Foundation框架—字符串
- Foundation框架—集合
- iOS开发UI篇—Button基础
- iOS开发UI篇—iOS开发中三种简单的动画设置
- yii2 核心验证器
- 【计算机概论】数据表示方式与软件程序运行
- unity中摄像机跟随主角,摄像机穿墙,射线碰撞检测,摄像机穿墙跟随