比赛 20241022 评测结果 WWWWWWWWWWWWWWWWWWWW
题目名称 移球游戏 最终得分 0
用户昵称 健康铀 运行时间 0.061 s
代码语言 C++ 内存使用 3.35 MiB
提交时间 2024-10-22 11:14:39
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m,a[55][510],c[55][55],color[55];
struct dd {
	int a,b;
};
vector<dd> d;
void sw(int id1,int pos1,int id2) {
	for(int i=1; i<=m-pos1+1; i++) {
		d.push_back({id1,n+1});
	}
	d.push_back({id2,id1});
	d.push_back({n+1,id2});
	for(int i=1; i<=m-pos1; i++) {
		d.push_back({n+1,id1});
	}
	return;
}
void change(int id1,int pos1,int id2,int pos2) {
	if(pos1==m) {
		sw(id2,pos2,id1);
		return;
	}
	if(pos2==m) {
		sw(id1,pos1,id2);
		return;
	}
	sw(id1,pos1,id2);
	sw(id2,pos2,id1);
	d.push_back({id2,n+1});
	d.push_back({id1,id2});
	d.push_back({n+1,id1});
	sw(id1,pos1,id2);
	sw(id2,pos2,id1);
}
int main() {
    freopen("2020ball.in","w",stdin);
    freopen("2020ball.out","w",stdout);
	cin>>n>>m;
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=m; j++) {
			cin>>a[i][j];
			c[i][a[i][j]]++;
		}
	}
	for(int i=1; i<=n; i++) {
		int ma=0,pos=0;
		for(int j=1; j<=n; j++) {
			if(ma<c[j][i]&&!color[j]) {
				ma=c[j][i];
				pos=j;
			}
		}
		color[pos]=i;
	}
	for(int i=1; i<=n; i++) {
		int x=1;
		while(x<m) {
			while(x<m&&a[i][x]==color[i])x++;
			if(a[i][x]==color[i])continue;
			for(int j=1; j<=n; j++) {
				if(i==j)continue;
				int y=1;
				while(y<m) {
					while(y<m&&a[j][y]!=color[i])y++;
					if(a[j][y]!=color[i])continue;
					change(i,x,j,y);
					swap(a[i][x],a[j][y]);
					while(x<m&&a[i][x]==color[i])x++;
					if(a[i][x]==color[i]) {
						break;
					}
				}
				if(a[i][x]==color[i])break;
			}
		}
	}
	cout<<d.size()<<endl;
	int si=d.size();
	for(int i=0; i<si; i++) {
		printf("%d %d\n",d[i].a,d[i].b);
	}
}