Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
WHY!WA__________In Reply To:Re:终于过了。。。。。 Posted by:0506010237 at 2008-10-28 20:55:26 /* 对于n*m的矩阵(n行m列),两个格局可以互相转换当且仅当,将空格用0代替以后: a. 若两格局中0的距离为偶数,两者的逆序数的奇偶性相同。 b. 若两格局中0的距离为奇数,两者的逆序数的奇偶性相异。 */ #include<iostream> using namespace std; int n,m,len,nixu,dist,cn; int c[1000009]; int p[1003][1003]; void merge(int left,int mid,int right){ int n1=mid-left+1; int n2=right-mid; int a[n1+2],b[n2+2]; for(int i=0;i<n1;i++) a[i]=c[left+i]; for(int j=0;j<n2;j++) b[j]=c[mid+1+j]; a[n1]=INT_MAX; b[n2]=INT_MAX; int i=0,j=0; for(int k=left;k<=right;k++){ if(a[i]<=b[j]){ c[k]=a[i]; i++; } else{ c[k]=b[j]; cn+=n1-i; j++; } } } void mergesort(int left,int right){ if(left<right) { int mid=(left+right)/2; mergesort(left,mid); mergesort(mid+1,right); merge(left,mid,right); } } int main(){ while(true){ scanf("%d%d",&n,&m); if(n==0 && m==0) break; len=0; cn=0; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ scanf("%d",&p[i][j]); c[len++]=p[i][j]; if(p[i][j]==0) dist=n-i+m-j; } } nixu=n*m-1; mergesort(0,len-1); if((dist+nixu+cn)%2==0) printf("YES\n"); else printf("NO\n"); } system("PAUSE"); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator