POJ 2893 M × N Puzzle——八数码有解条件
题意:给定M*N的数码图,问能否移动到最终状态
分析
有解的判定条件可见 八数码有解条件
值得一提的是,这道题求逆序对卡树状数组,只能用归并排序。
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std; const int maxn = 1e6 + ;
int n,m,pos,x,ans,zero;
int seq[maxn],tmp[maxn]; void msort(int l,int r) //对seq进行排序
{
if(l==r) return ;
int mid=(l+r)>>;
msort(l,mid);
msort(mid+,r);
int i=l,j=mid+,k=l-;
while(i<=mid&&j<=r)
{
if(seq[i]<=seq[j])
tmp[++k]=seq[i],i++;
else tmp[++k]=seq[j],j++,ans+=mid-i+; //ans就是逆序对个数
}
while(i<=mid)
tmp[++k]=seq[i],i++;
while(j<=r)
tmp[++k]=seq[j],j++;
for(int qwq=l;qwq<=r;qwq++)
seq[qwq]=tmp[qwq];
} int main()
{
while(scanf("%d%d",&n,&m)== && m)
{
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
scanf("%d",&x);
if(x) seq[++pos]=x;
else zero=n-i;
}
msort(,pos);
if(m&) zero=;
if((ans+zero)%==) printf("YES\n");
else printf("NO\n");
ans=;pos=;zero=;
}
return ;
}
参考链接:https://www.cnblogs.com/nopartyfoucaodong/p/9673434.html
POJ 2893 M × N Puzzle——八数码有解条件的更多相关文章
- 2019HDU多校第四场 Just an Old Puzzle ——八数码有解条件
理论基础 轮换与对换 概念:把 $S$ 中的元素 $i_1$ 变成 $i_2$,$i_2$ 变成 $i_3$ ... $i_k$ 又变成 $i_1$,并使 $S$ 中的其余元素保持不变的置换称为循环, ...
- POJ 2893 M × N Puzzle(树状数组求逆序对)
M × N Puzzle Time Limit: 4000MS Memory ...
- POJ 2893 M × N Puzzle
逆序对 n 数码问题的扩展 对于一个n * m 的问题来说,结论和 列数 m 奇偶有关 对于 m 是奇数来说 , 两个局面互相可达,当且仅当这两个局面按顺序写成一个数列,这个数列的逆序对数的奇偶性相同 ...
- BFS(八数码) POJ 1077 || HDOJ 1043 Eight
题目传送门1 2 题意:从无序到有序移动的方案,即最后成1 2 3 4 5 6 7 8 0 分析:八数码经典问题.POJ是一次,HDOJ是多次.因为康托展开还不会,也写不了什么,HDOJ需要从最后的状 ...
- poj 1077-Eight(八数码+逆向bfs打表)
The 15-puzzle has been around for over 100 years; even if you don't know it by that name, you've see ...
- Eight POJ - 1077 HDU - 1043 八数码
Eight POJ - 1077 HDU - 1043 八数码问题.用hash(康托展开)判重 bfs(TLE) #include<cstdio> #include<iostream ...
- poj 1077 Eight (八数码问题——A*+cantor展开+奇偶剪枝)
题目来源: http://poj.org/problem?id=1077 题目大意: 给你一个由1到8和x组成的3*3矩阵,x每次可以上下左右四个方向交换.求一条路径,得到12345678x这样的矩阵 ...
- Poj 1077 eight(BFS+全序列Hash解八数码问题)
一.题意 经典的八数码问题,有人说不做此题人生不完整,哈哈.给出一个含数字1~8和字母x的3 * 3矩阵,如: 1 2 X 3 4 6 7 5 8 ...
- ACM/ICPC 之 BFS-广搜进阶-八数码(经典)(POJ1077+HDU1043)
八数码问题也称为九宫问题.(本想查查历史,结果发现居然没有词条= =,所谓的历史也就不了了之了) 在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的某一数字,不同棋子上标的数字不相同.棋盘上还有一个 ...
随机推荐
- C#中使用HttpClient来Post数据的内容HttpContent的各种格式
平时使用各种网络传输的时候基本上是以Json格式进行的, 所以对其他几种格式也是一知半解, 今天静下心对其好好梳理一番. 首先我借鉴了一篇文章(https://segmentfault.com/a/1 ...
- Oracle游标的简易用法
create or replace procedure NW_DelYW(iOPERATION_ID number, sUserID varchar2) is sCurDJBH yw_operatio ...
- SAS学习笔记28 非参数秩和检验
在总体分布已知的前提下对参数进行的检验,即参数检验方法(parametric test). 然而,在实际中有些资料总体分布类型未知,或者不符合参数检验的适用条件,这时可以使用不以特定的总体分布为前提, ...
- C#通过重载构造函数传递参数、实现两个窗体下的方法的互相调用
直接切入主题 有时候同一个项目下我们可能会使用多个窗体,窗体间方法互相调用也不可避免,好了,使用无参无返回值的方法,开始上图 1.新建一个winform项目Form1,并再添加一个窗体Form2:拖入 ...
- ASP.NET Core 入门(4)(IIS 部署前后端站点)
.NET Core发布部署的文章园内有很多了,大家可以自行百度,该篇主要想总结需要注意的地方,列举前后端(比如前段 Vue,后端 WebAPI)在同一台服务器上的主要两种方式. 两种方式: 1. 前后 ...
- c# 163网易发送邮件
是4.0的,说以添加包是 代码: public class SendEmailInfo { /// <summary> /// 发送邮件 /// </summary> /// ...
- C#强制回收垃圾
[DllImport("psapi.dll")] private static extern int EmptyWorkingSet(int hProcess); public v ...
- [转载]详解网络传输中的三张表,MAC地址表、ARP缓存表以及路由表
[转载]详解网络传输中的三张表,MAC地址表.ARP缓存表以及路由表 虽然学过了计算机网络,但是这部分还是有点乱.正好在网上看到了一篇文章,讲的很透彻,转载过来康康. 本文出自 "邓奇的Bl ...
- Java 之 Map 接口
一.Map 接口概述 java.util.Map 接口专门用来存放键值对这种对象关系的对象. 下面比较一下 Collection 与 Map 的区别: Collection 中的集合,元素是孤立存在的 ...
- Java 之 可变参数
可变参数 在JDK1.5之后,如果我们定义一个方法需要接受多个参数,并且多个参数类型一致,我们可以对其简化成如下格式: 修饰符 返回值类型 方法名(参数类型... 形参名){ } 其实这个书写完全等价 ...