N数码问题

首先,先贯彻一个理念。奇偶性很神奇,对于一类问题,如果属于同种性质(奇偶性相同),那么它们就是完全相同(这个在某种意义上说)的,,一些问题如果奇偶性相同那么里面涉及的问题都是等价的。

数码问题考虑的是逆序对的奇偶性。将二维数组排成一维,空格和左右的数交换不改变逆序对个数(实际上在一维中,空格和左右的数交换,忽略空格的话,交换前后一维数组的排列顺序是完全不变的)。

4*4空间

5 6 7 8 \n 9 10 % 12 --> 5 6 % 8 \n 9 10 7 12   空格和上面的数7交换相当于7依次和后面的8 9 10交换共N-1个数。

将7 8 9 10作为一个整体,内部交换不改变外部的逆序对个数(也就是这个整个前后数的逆序对个数)。在这个整体中,8 9 10之间的逆序对个数也是不改变的,会改变的只有7和8 9 10之间的逆序对个数(共形成N-1个逆序对)。

这个整体中,原来是逆序的变成正序,原来正序变成逆序,因此原来逆序对数x+交换后的逆序对数y=N-1;

当N为奇数时,x+y=奇数,x,y一奇一偶,差值为奇数
当N为偶数时,x+y=偶数,x,y同奇偶性,差值为偶数
  • 两个不同状态相互可达的充要条件:“ 两个状态逆序对数之差 ” 和 “ 两个状态空格所在行数之差 ” 奇偶性相同。(这里考虑空格所在行数之差是因为,空格只有上下交换才会改变逆序对数)

2019年杭电多校联赛-Just an Old Puzzle

  • 15数码是否有解问题
#include <bits/stdc++.h>
using namespace std;
#define fre freopen("C:\\Users\\22765\\Desktop\\in.txt","r",stdin);
#define ms(a) memset((a),0,sizeof(a))
#define rep(i,a,b) for(register int (i)=(a);(i)<(b);++(i))
#define sf(x) scanf("%d",&(x))
#define reg register
typedef long long LL;
const int inf=(0x7f7f7f7f);
const int maxn=3000;
int a[20]; int main(){
int t;sf(t);
int x,r;
while(t--){
int k=0;
rep(i,0,4)rep(j,0,4){
sf(x);
if(x==0){
r=i;continue;
}
a[k++]=x;
}
//计算逆序对可以使用树状数组,这里规模小,直接爆力
int ni=0;
rep(i,0,k){
rep(j,0,i)
if(a[j]>a[i])ni++;
} if((ni+3-r)&1)puts("No");
else puts("Yes");
}
return 0;
}

# N数码问题的更多相关文章

  1. 基于小脚丫的ADC081S101 电压采集595数码管显示

    RTL结构图 采集模块运用SPI 通讯 MISO方式收集数据 module ad_collect(input sddata,input rst_n,output reg cs,output reg s ...

  2. CH Round #72 奇数码问题[逆序对 观察]

    描述 你一定玩过八数码游戏,它实际上是在一个3*3的网格中进行的,1个空格和1~8这8个数字恰好不重不漏地分布在这3*3的网格中. 例如:5 2 81 3 _4 6 7 在游戏过程中,可以把空格与其上 ...

  3. js基础练习三之数码时钟

    这章节有两个实例,1,定时器的使用; 2,数码时钟; 用到的js知识:定时器,Date对象. >>>>>定时器 开启定时器: setInterval 间隔型 setTim ...

  4. 10-8位7段数码管驱动实验——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献   实验目的: 1.实现FPGA驱动数码管动态显示: 2.使用In system sources and probes editor工具,输入需要显示在数码管上的的数据, ...

  5. A*算法 -- 八数码问题和传教士过河问题的代码实现

    前段时间人工智能的课介绍到A*算法,于是便去了解了一下,然后试着用这个算法去解决经典的八数码问题,一开始写用了挺久时间的,后来试着把算法的框架抽离出来,编写成一个通用的算法模板,这样子如果以后需要用到 ...

  6. Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)

    1.同步动态扫描 多个数码管的显示采用的是同步动态扫描方法,同步动态扫描指的是:行信号和列信号同步扫描,是一种并行操作. 2.数码管驱动电路实现思路      如果要求数码管显示我们想要的数字,首先需 ...

  7. [51单片机] 以从0开始做4位8段共阴数码管3461AS驱动谈细节决定高质量DIY

    目录 1)问题产生 2)失败尝试 3)最终方案 4)使用方法 5)知识共享 1)问题产生 在上一篇“以PWM控制直流电机为例建一个简单的51工程框架”中已向大家介绍了一个封装好的8位8段数码管的驱动( ...

  8. nios II--实验7——数码管IP软件部分

    软件开发 首先,在硬件工程文件夹里面新建一个software的文件夹用于放置软件部分:打开toolsàNios II 11.0 Software Build Tools for Eclipse,需要进 ...

  9. nios II--实验7——数码管IP硬件部分

    数码管 硬件开发 新建原理图 打开Quartus II 11.0,新建一个工程,File -> New Project Wizard…,忽略Introduction,之间单击 Next>  ...

  10. 八数码问题:C++广度搜索实现

    毕竟新手上路23333,有谬误还请指正. 课程设计遇到八数码问题(这也是一坨),也查过一些资料并不喜欢用类函数写感觉这样规模小些的问题没有必要,一开始用深度搜索却发现深搜会陷入无底洞,如果设定了深度限 ...

随机推荐

  1. php " ",0,'0',false ==判断

    今天项目中遇到的一个问题,举个栗子: if($_GET['is_has_idcard']==0 || $_GET['is_has_idcard']==1){ echo '这次我要上传身份证'; } i ...

  2. Java String字符串的不可变

    Java 通过把String类设计为final使类不可继承,将变量value设置为private并且是final的,且value没有setter方法,不可修改. 为什么这么设计: 1.字符串常量池的需 ...

  3. 10.矩形覆盖 Java

    题目描述 我们可以用2**1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个21的小矩形无重叠地覆盖一个2n的大矩形,总共有多少种方法? 思路 其实,倒数第一列要么就是1个2**1的矩形竖着放,要么就 ...

  4. 认识weblogic的各个机构

    一.认识Weblogic中各个机构 WebLogic是一个企业级的应用服务器,包括j2ee中的各类应用,是jsp,servlet,ejb的容器.功能强大,为了更方便的管理weblogic的各个功能,从 ...

  5. MySort作业与IO-Myhead

    一.MySort 1.题目要求 模拟实现Linux下Sort -t : -k 2的功能. 要有伪代码,产品代码,测试代码(注意测试用例的设计) 参考 Sort的实现.提交博客链接. 2.产品代码 im ...

  6. 基本CSS布局二

    基本CSS布局二------基本页面布局二 /*主面板样式*/ #container { width:100%; margin:0px auto;/*主面板DIV居中*/ } /*顶部面板样式*/ # ...

  7. 纹身女孩 Tattooed girl 可爱动人 出水芙蓉 窈窕多姿

    目录 开宗明义

  8. koa 基础(十四)cookie 的基本使用

    1.app.js /** * cookie的简介: * 1.cookie保存在浏览器客户端 * 2.可以让我们用同一个浏览器访问同一个域名的时候共享数据 * * cookie的作用: * 1.保存用户 ...

  9. JS遍历OCX方法

    /----查看OCX组件的属性 <html> <head> <title>OCX</title> <meta http-equiv="C ...

  10. 用js脚本实现链接

    使用json实现分页的时候,扩展了一下如何使用JS现实链接,其实很简单,但是之前我没用过... 就以分页的上一页,下一页来举例: <script type="text/javascri ...