奇数码问题(逆序对)
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
奇数码问题(逆序对)相关推荐
- POJ - 2893 M × N Puzzle(n*m数码问题+逆序对结论)
题目链接:点击查看 题目大意:给出一个n*m的数码问题,问是否能到达最终状态 题目分析:对于数码问题,我们先一步一步分析,先简单看一下定义: 八数码的问题描述为: 在3×3的棋盘上,摆有八个棋子,每个 ...
- 108. 奇数码问题【思维 / 逆序对】
n为奇数,左右交换不改变逆序对数个数,上下交换不改变逆序对奇偶性. 结论就是,将其转化成1维,将0去除掉,求逆序对的数量,看这两个的逆序对的奇偶性是否相同即可. #include<bits/st ...
- 牛客IOI周赛26-提高组(逆序对,对序列,未曾设想的道路) 题解
文章目录 逆序对 对序列 未曾设想的道路 牛客IOI周赛26-提高组 逆序对 这种套路之前已经见过几次了,肯定不是模拟操作数列 opt 1 对于i∈[1,l)⋃(r,n]i∈[1,l)\bigcup( ...
- 1164: 分治 逆序对
1164: 分治 逆序对 时间限制: 1 Sec 内存限制: 128 MB 题目描述 给一列数a1,a2,...,an,求它的逆序对数,即有多少个有序对(i,j),使得i<j且ai>aj ...
- 【2018.12.15】【考试总结】【模拟+逆序对+树状数组+贪心+multiset】爆零之旅
这是我悲惨的接近爆零的一次考试,但是本蒟蒻不能放弃,还是要总结的QAQ 答题卡 [题目背景] 八月是个悲惨的月份.先不谈炎热的天气,对于新生来说,八月意味着军训: 而对于高二高三的同学来说,八月意味着 ...
- 【逆序对】Ultra - Quicksort
POJ 2299 Ultra-QuickSort 只允许交换,比较相邻的元素, 求最少多少次交换可以使得序列有序 冒泡排序的次数-->数列中逆序对的个数减1-->最终为0 -->答案 ...
- UVA 11990 ``Dynamic'' Inversion 动态逆序对
``Dynamic'' Inversion Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/index ...
- 期望dp ---- B. Tree Array 思维+期望dp 逆序对期望数
题目大意 题目大意: n(n≤200)n(n\leq200)n(n≤200)个节点的树.初始的时候,等概率随机选择一个点标记,接来随机选择一个与标记点相连的未标记点来标记,直到所有的点都被标记.根据点 ...
- szu 寒训第二天 树状数组 二维树状数组详解,以及树状数组扩展应用【求逆序对,以及动态第k小数】
树状数组(Binary Index Tree) 树状数组可以解决可以转化为前缀和问题的问题 这是一类用以解决动态前缀和的问题 (有点像线段树简版) 1.对于 a1 + a2 + a3 + - + an ...
最新文章
- golang中的strings.SplitN
- linux 系统kill用法
- Py之keras-retinanet:keras-retinanet的简介、安装、使用方法之详细攻略
- Linux复习资料(二)、Linux基本操作
- 使用display:none和visibility:hidden隐藏的区别
- itextPdf~将PDF页面大小转为A4格式
- pytorch l2正则化_吴恩达深度学习 编程作业六 正则化(2)
- centos 5.6安装nginx+mysql+php(php-fpm)+phpmyadmin总结
- 论文笔记-LSHTC: A Benchmark for Large-Scale Text Classification-2015
- python字典_Python字典
- Dom对象与jQuery对象的转换
- DWM1000开启后TX、RX、SFD、RXOK均不亮的原因
- 会计计算机论文,关于计算机论文格式模板,关于电算化会计相关论文范文资料...
- h5 7个移动端框架
- 空间解析几何中那些图形和方程(大彻大悟版)
- dreamweaver php网站模板,Dreamweaver软件-教你一分钟搞定一个网页模板
- winform TreeView节点中的CheckBox 禁用
- 多任务学习——【ICML 2018】GradNorm
- 计算机无法安装hp网络打印机,无法安装打印机驱动是怎么回事?不能安装惠普打印机驱动的解决方法...
- Golang 定时任务 github/robfig/cron/v3 使用与源码解析
热门文章
- mockmvc get请求 tm的 一直404_面试:SpringMVC在接收到请求后的调用细节是什么?
- 测试一些利用PYTHON完成中英文翻译的效果
- 智能车竞赛技术报告 | 智能车视觉 - 中国计量大学 - 赛博-10
- 如何使用一个单片机的IO口控制两个LED?
- 去重仅保留一条_清水出芙蓉,天然去雕饰,牛仔背带裤配针织上衣的清纯温柔穿搭...
- Linux终端关闭屏幕显示,使用命令行关闭监视器
- mysql5.7.23权限问题_部署MySQL5.7时的权限问题
- mysql字节对齐_结构体字节对齐-位域及其对齐
- 怎么git 自己建的服务器_Git服务器搭建,以及Git基本操作
- initramfs 文件系统