#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=1005; int Map[N][N],a[N],mark[N]; int Sort(int n) { //比赛的时候真的没有写这道题,因为没有什么思路,也就放那里了.看到提示,才知道这是一个水题,但是,没人做出来. //-------------------------------------------------- //后来看了题解是这么想的,但是明显的是错误的. //以为冒泡交换次数就为ans,但是错的. //肯定得交换的次数多了. //比如1 2 3 2 5就不用再交换了.1 2 2 3 5 也是可以的。 //判断用不用交换的准则应该是是否a[i]<=i //-------------------------------------------------- //后来是这么做的.看了别人的代码. //应该按行来进行固定.否则的话,就会混乱. //第一行确定,然后确定第二行.等等 int i,j,num=0; for(i=1;i<=n;i++) { int p=0; for(j=i;j<=n;j++) { if(a[j]<=i) { p=j; break; } } for(int k=j;k>i;k--) { num++; swap(a[k],a[k-1]); } } return num; } int main() { int n; while(scanf("%d",&n)!=EOF) { memset(a,0,sizeof(a)); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&Map[i][j]); for(int i=1;i<=n;i++) for(int j=n;j>=1;j--) if(Map[i][j]==1) { a[i]=j; break; } printf("%d\n",Sort(n)); } return 0; }