Description

你一定玩过八数码游戏,它实际上是在一个33的网格中进行的,1个空格和1~8这8个数字恰好不重不漏地分布在这33的网格中。

例如:

5 2 8

1 3 _

4 6 7

在游戏过程中,可以把空格与其上、下、左、右四个方向之一的数字交换(如果存在)。例如在上例中,空格可与左、上、下面的数字交换,分别变成:

5 2 8 5 2 _ 5 2 8

1 _ 3 1 3 8 1 3 7

4 6 7 4 6 7 4 6 _

奇数码游戏是它的一个扩展,在一个nn的网格中进行,其中n为奇数,1个空格和1~nn-1这nn-1个数恰好不重不漏地分布在nn的网格中。

空格移动的规则与八数码游戏相同,实际上,八数码就是一个n=3的奇数码游戏。

现在给定两个奇数码游戏的局面,请判断是否存在一种移动空格的方式,使得其中一个局面可以变化到另一个局面。

Input Format

多组数据,对于每组数据:

第1行一个奇整数n。

接下来n行每行n个整数,表示第一个局面。

接下来n行每行n个整数,表示第二个局面。

局面中每个整数都是0~n*n-1之一,其中用0代表空格,其余数值与奇数码游戏中的意义相同,保证这些整数的分布不重不漏。

Output Format

对于每组数据,若两个局面可达,输出TAK,否则输出NIE。

Hint

对于100%的数据,1<=n<=500,n为奇数,每个测试点不超过10组。

Solution

这题就是判断2个棋盘的逆序对是否同奇同偶,是的话就可以到达,否则不行

真是太苟了,

然后用树状数组或者归并排序求一下逆序对就好了,

这里用的是树状数组

Code

#include <cstdio>
#include <cstring>
#define lowbit(x) ((x)&(-x))int n,f[300010];inline int read() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x * f;
}inline void add(int x){for(int i=x;i<=n;i+=lowbit(i)) f[i]++;}
inline int sum(int x){int r=0;for(int i=x;i>=1;i-=lowbit(i)) r+=f[i];return r;}inline int work(){memset(f,0,sizeof(f));int r=0;for(int i=1,x;i<=n;++i){x=read();if(!x) continue;r+=sum(n)-sum(x);add(x);}return r&1;
}int main() {while(~scanf("%d",&n)){n*=n;if(work()==work()) printf("TAK\n");else printf("NIE\n");}return 0;
}

转载于:https://www.cnblogs.com/void-f/p/7767079.html

奇数码问题(逆序对)相关推荐

  1. POJ - 2893 M × N Puzzle(n*m数码问题+逆序对结论)

    题目链接:点击查看 题目大意:给出一个n*m的数码问题,问是否能到达最终状态 题目分析:对于数码问题,我们先一步一步分析,先简单看一下定义: 八数码的问题描述为: 在3×3的棋盘上,摆有八个棋子,每个 ...

  2. 108. 奇数码问题【思维 / 逆序对】

    n为奇数,左右交换不改变逆序对数个数,上下交换不改变逆序对奇偶性. 结论就是,将其转化成1维,将0去除掉,求逆序对的数量,看这两个的逆序对的奇偶性是否相同即可. #include<bits/st ...

  3. 牛客IOI周赛26-提高组(逆序对,对序列,未曾设想的道路) 题解

    文章目录 逆序对 对序列 未曾设想的道路 牛客IOI周赛26-提高组 逆序对 这种套路之前已经见过几次了,肯定不是模拟操作数列 opt 1 对于i∈[1,l)⋃(r,n]i∈[1,l)\bigcup( ...

  4. 1164: 分治 逆序对

    1164: 分治 逆序对 时间限制: 1 Sec  内存限制: 128 MB 题目描述 给一列数a1,a2,...,an,求它的逆序对数,即有多少个有序对(i,j),使得i<j且ai>aj ...

  5. 【2018.12.15】【考试总结】【模拟+逆序对+树状数组+贪心+multiset】爆零之旅

    这是我悲惨的接近爆零的一次考试,但是本蒟蒻不能放弃,还是要总结的QAQ 答题卡 [题目背景] 八月是个悲惨的月份.先不谈炎热的天气,对于新生来说,八月意味着军训: 而对于高二高三的同学来说,八月意味着 ...

  6. 【逆序对】Ultra - Quicksort

    POJ 2299 Ultra-QuickSort 只允许交换,比较相邻的元素, 求最少多少次交换可以使得序列有序 冒泡排序的次数-->数列中逆序对的个数减1-->最终为0 -->答案 ...

  7. UVA 11990 ``Dynamic'' Inversion 动态逆序对

    ``Dynamic'' Inversion Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/index ...

  8. 期望dp ---- B. Tree Array 思维+期望dp 逆序对期望数

    题目大意 题目大意: n(n≤200)n(n\leq200)n(n≤200)个节点的树.初始的时候,等概率随机选择一个点标记,接来随机选择一个与标记点相连的未标记点来标记,直到所有的点都被标记.根据点 ...

  9. szu 寒训第二天 树状数组 二维树状数组详解,以及树状数组扩展应用【求逆序对,以及动态第k小数】

    树状数组(Binary Index Tree) 树状数组可以解决可以转化为前缀和问题的问题 这是一类用以解决动态前缀和的问题 (有点像线段树简版) 1.对于 a1 + a2 + a3 + - + an ...

最新文章

  1. golang中的strings.SplitN
  2. linux 系统kill用法
  3. Py之keras-retinanet:keras-retinanet的简介、安装、使用方法之详细攻略
  4. Linux复习资料(二)、Linux基本操作
  5. 使用display:none和visibility:hidden隐藏的区别
  6. itextPdf~将PDF页面大小转为A4格式
  7. pytorch l2正则化_吴恩达深度学习 编程作业六 正则化(2)
  8. centos 5.6安装nginx+mysql+php(php-fpm)+phpmyadmin总结
  9. 论文笔记-LSHTC: A Benchmark for Large-Scale Text Classification-2015
  10. python字典_Python字典
  11. Dom对象与jQuery对象的转换
  12. DWM1000开启后TX、RX、SFD、RXOK均不亮的原因
  13. 会计计算机论文,关于计算机论文格式模板,关于电算化会计相关论文范文资料...
  14. h5 7个移动端框架
  15. 空间解析几何中那些图形和方程(大彻大悟版)
  16. dreamweaver php网站模板,Dreamweaver软件-教你一分钟搞定一个网页模板
  17. winform TreeView节点中的CheckBox 禁用
  18. 多任务学习——【ICML 2018】GradNorm
  19. 计算机无法安装hp网络打印机,无法安装打印机驱动是怎么回事?不能安装惠普打印机驱动的解决方法...
  20. Golang 定时任务 github/robfig/cron/v3 使用与源码解析

热门文章

  1. mockmvc get请求 tm的 一直404_面试:SpringMVC在接收到请求后的调用细节是什么?
  2. 测试一些利用PYTHON完成中英文翻译的效果
  3. 智能车竞赛技术报告 | 智能车视觉 - 中国计量大学 - 赛博-10
  4. 如何使用一个单片机的IO口控制两个LED?
  5. 去重仅保留一条_清水出芙蓉,天然去雕饰,牛仔背带裤配针织上衣的清纯温柔穿搭...
  6. Linux终端关闭屏幕显示,使用命令行关闭监视器
  7. mysql5.7.23权限问题_部署MySQL5.7时的权限问题
  8. mysql字节对齐_结构体字节对齐-位域及其对齐
  9. 怎么git 自己建的服务器_Git服务器搭建,以及Git基本操作
  10. initramfs 文件系统