sgu 139 Help Needed!

时间:2021-03-12 16:42:01

题意:16数码是否有解?

先计算展开成一维后逆序对。如果0在最后一行,那么逆序偶时有解。4*4时(n为偶)0的位置上升一行,逆序对+3或-1(奇偶性变化)。(n为奇时+2或+0,不变)

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <cstring>
#include <map>
#include <queue>
#include <set>
#include <cassert>
#define mkp make_pair
using namespace std;
const double EPS=1e-;
const int SZ=,INF=0x7FFFFFFF;
typedef long long lon;
int arr[SZ]; int main()
{
std::ios::sync_with_stdio();
//freopen("d:\\1.txt","r",stdin);
lon casenum;
//cin>>casenum;
//for(lon time=1;time<=casenum;++time)
{
int n=;
int res=;
for(int i=;i<n;++i)
{
cin>>arr[i];
if(arr[i]==)res+=i/+;
}
for(int i=;i<n;++i)
{
for(int j=i+;j<n;++j)
{
if(arr[i]!=&&arr[j]!=&&arr[i]>arr[j])++res;
}
}
cout<<(res&?"NO":"YES")<<endl;
}
return ;
}