题意:
给你一个数字拼图,问你数字拼图能否能复原成原来的样子。
题解:
数字拼图的性质是,逆序数奇偶相同时,可以互相转化,逆序数奇偶不同,不能互相转化。
因此统计逆序对即可。
#include<iostream> using namespace std; int main(){ int t; scanf("%d",&t); while(t--){ int a[20]; int kg; for(int i=1;i<=16;i++){ scanf("%d",&a[i]); if(a[i]==0)kg=i; } while(kg%4){ swap(a[kg],a[kg+1]); kg++; } while(kg%16){ swap(a[kg],a[kg+4]); kg+=4; } int nxd=0; for(int i=1;i<15;i++){ for(int j=i+1;j<=15;j++){ if(a[j]<a[i])nxd++; } } if(nxd%2==0)printf("Yes "); else printf("No "); } return 0; }