| 记录编号 | 89561 | 评测结果 | AAAAAAAAAA | 
    
        | 题目名称 | 1539.[Ural 1568] 火车车厢排序 | 最终得分 | 100 | 
    
        | 用户昵称 |  cstdio | 是否通过 | 通过 | 
    
        | 代码语言 | C++ | 运行时间 | 0.079 s | 
    
        | 提交时间 | 2014-03-02 21:11:15 | 内存使用 | 0.97 MiB | 
    
    
    
    		显示代码纯文本
		
		#include<iostream>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
using namespace std;
const int SIZEN=10010;
int f[20][SIZEN]={0};
int N;
void turn(int a[],int b[]){
	pair<int,int> data[SIZEN];
	memset(data,0,sizeof(data));
	int rpos[SIZEN]={0};//在转换后的矩阵中第几行
	for(int i=1;i<=N;i++) data[i]=make_pair(a[i],i);
	sort(data+1,data+1+N);
	int numr=1;
	rpos[1]=1;
	for(int i=2;i<=N;i++){
		if(data[i].second>data[i-1].second) rpos[data[i].first]=numr;
		else rpos[data[i].first]=++numr;
	}
	int tot=0;
	for(int i=1;i<=N;i++) if(rpos[a[i]]&1) b[++tot]=a[i];
	for(int i=1;i<=N;i++) if(!(rpos[a[i]]&1)) b[++tot]=a[i];
}
bool check(int s[]){//是否升序
	for(int i=2;i<=N;i++) if(s[i-1]>s[i]) return false;
	return true;
}
int main(){
	freopen("traincarsorting.in","r",stdin);
	freopen("traincarsorting.out","w",stdout);
	scanf("%d",&N);
	int i;
	for(i=1;i<=N;i++) scanf("%d",&f[0][i]);
	for(i=0;!check(f[i]);i++) turn(f[i],f[i+1]);
	int step=i;
	printf("%d\n",step);
	for(int i=0;i<=step;i++){
		for(int j=1;j<=N;j++) printf("%d ",f[i][j]);
		printf("\n");
	}
	return 0;
}