标签:
题目
每次把空列换到最后一列,把非空行换到最下一行。
#include<cstdio> #include<algorithm> #define N 1005 using namespace std; struct ans{int i,a,b;} a[100005]; int n,m,x,y,ma[N][N],r[N],c[N]; int main() { scanf("%d",&n); for(int i=1; i<n; i++) { scanf("%d%d",&x,&y); ma[x][y]=1; r[x]++; c[y]++; } for(; n; n--) { for(int i=1; i<n; i++) if(c[i]==0) { a[m++]=(ans){2,n,i}; for(int j=1; j<=n; j++) swap(ma[j][n],ma[j][i]); swap(c[i],c[n]); break; } for(int i=1; i<n; i++) if(r[i]) { a[m++]=(ans){1,n,i}; swap(ma[n],ma[i]); swap(r[i],r[n]); break; } for(int i=1; i<=n; i++) if(ma[n][i])c[i]--; } printf("%d\n",m); for(int i=0; i<m; i++) printf("%d %d %d\n",a[i].i,a[i].a,a[i].b); }
【CodeForces 266C】Below the Diagonal(模拟)
标签:
原文地址:http://www.cnblogs.com/flipped/p/5698536.html