x数码难题有解性判定:

只有必要性证明,没有充分性......

还记得那个naive至极的八数码难题吗?

它回来了!

主要是借助逆序对这一神奇的手段:

考虑把x数码写成一排时的逆序对的奇偶性:

当你左右挪时显然没有影响。

当你上下挪时:列数为奇数则对逆序对奇偶性无影响,为偶数则变动。

然后我们就按照这个莫名其妙的法则A题......666

(注意:此法则不能容许有相同数字。否则奇偶性随机变化,无从下手)

 // poj 2893
#include <cstdio>
#include <cstring>
using namespace std;
const int N = ;
const int N2 = N * N;
int g[N][N];
typedef long long LL;
struct TreeArray {
int a[N2];
void clear() {
memset(a, , sizeof(a));
return;
}
int lowbit(int x) {
return x & (-x);
}
void add(int x, int y) {
if(x == ) {
return;
}
for(int i = x; i < N2; i += lowbit(i)) {
a[i] += y;
}
return;
}
int getsum(int x) {
if(x == ) {
return ;
}
int ans = ;
for(int i = x; i > ; i -= lowbit(i)) {
ans += a[i];
}
return ans;
}
int ask(int l, int r) {
return getsum(r) - getsum(l - );
}
}ta; int main() {
int a, b, xx, yy;
scanf("%d%d", &a, &b);
while(a || b) {
ta.clear();
for(int i = ; i <= a; i++) {
for(int j = ; j <= b; j++) {
scanf("%d", &g[i][j]);
if(!g[i][j]) {
xx = i;
yy = j;
}
}
}
// 本题不用离散化
LL ans = ;
for(int i = a; i >= ; i--) {
for(int j = b; j >= ; j--) {
if(g[i][j]) {
ans += ta.getsum(g[i][j] - );
ta.add(g[i][j], );
}
}
}
if(!(b & )) {
ans += (a - xx);
}
if(ans & ) {
printf("NO\n");
}
else printf("YES\n");
scanf("%d%d", &a, &b);
}
return ;
}

AC代码

poj2893 M×N puzzle的更多相关文章

  1. 【POJ2893&HDOJ6620】M × N Puzzle(n*m数码判定)

    题意:给定一个n*m的矩阵,其中不重复地填[0,n*m-1],问是否能通过有限步数将0移到右下角 n,m<=1e3 思路:结论题 当板子了 #include<bits/stdc++.h&g ...

  2. poj2893 M*N puzzle 【n*m数码问题小结】By cellur925

    题目传送门 这个问题是来源于lydrainbowcat老师书上讲排序的一个扩展.当时讲的是奇数码问题,其实这种问题有两种问法:一种局面能否到另一种局面.到达目标局面的最小步数. 本文部分内容引用于ly ...

  3. POJ 2893 M × N Puzzle(树状数组求逆序对)

                                                               M × N Puzzle Time Limit: 4000MS   Memory ...

  4. hdu 5465 Clarke and puzzle 二维线段树

    Clarke and puzzle Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

  5. M × N Puzzle POJ - 2893(奇数码)

    The Eight Puzzle, among other sliding-tile puzzles, is one of the famous problems in artificial inte ...

  6. HDU 5465 Clarke and puzzle Nim游戏+二维树状数组

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5465 Clarke and puzzle  Accepts: 42  Submissions: 26 ...

  7. POJ 2983 M × N Puzzle

    M × N Puzzle Time Limit: 4000MS   Memory Limit: 131072K Total Submissions: 4860   Accepted: 1321 Des ...

  8. 【LeetCode】773. Sliding Puzzle 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/sliding- ...

  9. Puzzle 面向服务/切面(AOP/IOC)开发框架 For .Net

    Puzzle 面向服务/切面AOP开发框架 For .Net AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效 ...

随机推荐

  1. Idea批量修改变量名

    Idea批量修改变量名.在变量名上进行rename操作,所有的同名变量都会自动更改. 快捷键:ALT+SHIFT+R

  2. Day 5-3 多态与多态性

    多态与多态性 鸭子类型 多态与多态性 多态:一类事物有多种形态.比如,动物有多种形态,人,狗,猪,豹子.水也有多种形态,冰,雪,水蒸气. #多态:同一类事物的多种形态 import abc class ...

  3. SQL年月日格式化

    Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16

  4. prop与attr

    1.都是获取当前元素某个属性的值 2.当获取多选框的状态时,如果没有选中,此时没有checked属性,用attr获取得到undifien prop得到false. 3.html原生属性用prop获取, ...

  5. /proc/diskstats

    读取磁盘统计信息,如下所示: linux-HpdBKE:~ # cat /proc/diskstats sda sda1 sda2 dm- dm- dm- sda为整个硬盘的统计信息,sda1为第一个 ...

  6. netstat -na 查看有大量TIME_WAIT解决办法(修改内核参数)

    # netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c      16 CLOSING     130 ESTABLISHED     298 FIN_WA ...

  7. maven 中的pom中的 dependencyManagement 和 dependencies

    参考:maven pom.xml 中 dependencyManagement和dependencies详解 现在的项目基本上都是使用多module来管理的,这就涉及到一个问题,多module之间如何 ...

  8. Java使用RabbitMQ之消息确认(confirm模板)

    RabbitMQ生产者消息确认Confirm模式,分为普通模式.批量模式和异步模式,本次举例为普通模式. 源码: package org.study.confirm4; import com.rabb ...

  9. Deploy .NET Core with Docker

    Creating a .NET Core project If you already have an existing .NET Core project you are more than wel ...

  10. springboot使用redis

    1.pom文件中引入 spring-boot-starter-redis <dependency> <groupId>org.springframework.boot</ ...