首页 技术 正文
技术 2022年11月21日
0 收藏 403 点赞 4,064 浏览 689 个字

http://acm.hdu.edu.cn/showproblem.php?pid=6620

N数码问题:

n*n矩阵,里面填着1—n*n-1,还有1个空格,

通过上下左右移动空格的位置,

使矩阵里的数升序排列,空格在右下角。

解的存在性判断结论:

(上面的N=n*n-1)

将原矩阵从左上角开始展开成一个序列,计算该序列的逆序对数A

将目标矩阵同理计算逆序对数B

逆序对数的计算不包括空格

若n为奇数,A与B奇偶性相同则有解

若n为偶数,设原矩阵空格在第a行,目标矩阵空格在第b行,k=|a-b|

若k为奇数,A与B奇偶性不同则有解

若k为偶数,A与B奇偶性相同则有解

简要理解:

空格左右移动,逆序对数的奇偶性不变

空格上下移动,

若n为偶数,空格与上/下的数m 之间相隔n-1个数,这n-1个数中,若有c个比m小,则有n-1-c个比m大

逆序数改变 |(n-1-c)- c |,即逆序对数改变奇数对

若n为奇数,同理,逆序对数改变偶数对

本题代码:

#include<cstdio>using namespace std;int a[];int main()
{
int T;
scanf("%d",&T);
int c,d,sum;
d=;
while(T--)
{
for(int i=;i<=;++i)
{
scanf("%d",&a[i]);
if(!a[i]) c=(i-)/+;
}
sum=;
for(int i=;i<=;++i)
if(a[i])
for(int j=i+;j<=;++j)
if(a[j])
if(a[i]>a[j]) sum++;
if(!(((d-c)^sum)&)) printf("Yes\n");
else printf("No\n");
}
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,896
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,423
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,241
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,055
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,684
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,722