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");
}
}

最新文章

  1. django 强制登录最佳实践
  2. MyBatis - MyBatis使用log4j2显示sql和结果集
  3. ubuntu16.04安装jdk,tomcat
  4. 在不知下面有几个元素的时候,要去除最后一个元素的下边框jquery代码
  5. for语句
  6. easyrtc-server在ubuntu14.04上的安装方法
  7. ios 给uiview创作遮罩
  8. 关于Git补丁文件交互
  9. php中的双引号和单引号的区别?
  10. 【Android N_启示录】
  11. fiddler 抓取手机app请求包
  12. A1146. Topological Order
  13. js数组歌
  14. InvocationHandler和Proxy(Class)的动态代理机制详解
  15. Centos7下的systemctl命令与service和chkconfig
  16. EasyUI值的清空与获取
  17. Excel 两列单元格合并超级链接的VBA 写法
  18. LeetCode题解之 Odd Even Linked List
  19. django 项目运行时static静态文件不能加载问题处理
  20. Flink架构分析之资源分配

热门文章

  1. 记一次ssh.exec_command(cmd)执行后读取结果为空
  2. Deep Learning专栏--强化学习之MDP、Bellman方程(1)
  3. SpringBoot 通过jjwt快速实现token授权
  4. SprintBoot 实现上传下载
  5. Oracle数据库触发器
  6. oracle 自增序列实现 可作为主键
  7. 对Haskell这门语言的基本认识
  8. vue知识点小结
  9. Salesforce LWC学习(一)Salesforce DX配置
  10. 如何简单使用tensorboard展示(二)