记录编号 |
596130 |
评测结果 |
WWWWWWWWWWWWWWWWWWWW |
题目名称 |
[NOIP 2020]移球游戏 |
最终得分 |
0 |
用户昵称 |
健康铀 |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
0.058 s |
提交时间 |
2024-10-22 15:09:00 |
内存使用 |
3.32 MiB |
显示代码纯文本
#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);
}
}