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. Bootstrap 字体图标(Glyphicons)

    http://www.runoob.com/bootstrap/bootstrap-glyphicons.html 什么是字体图标? 字体图标是在 Web 项目中使用的图标字体.虽然,Glyphico ...

  2. django mysql数据库使用自己的User

    由于我需要的User模型与django自带的User有所不同,所以需要定义自己的User Model,这里记录一下方法,适用于django 1.5+. 因为使用自己的后台,放弃django的管理后台, ...

  3. 多IP地址--笔记

    多IP 地址特性使虚拟用户可以在一个load generator上运行且被识别为多个IP地址 1 虚拟IP是同一个generator上的多个IP,这种分配过程由controller自动来进行 2 对于 ...

  4. Python——Flask框架——Web表单

    一.框架Flask-WTF 安装: pip install flask-wtf 需要程序设置一个密钥 app = Flask(__name__) app.config['SECRET_KEY'] = ...

  5. Linux下 rewrite_mod 的配置

    以下使用最新的 Ubuntu 16.04 测试; 安装好apache后先确认有没有rewrite模块,大多数情况下是有的:ls /etc/apache2/mods-available |grep re ...

  6. gauss——seidel迭代

    转载:https://blog.csdn.net/wangxiaojun911/article/details/6890282 Gauss–Seidelmethod 对应于形如Ax = b的方程(A为 ...

  7. 洛谷 P1441 砝码称重

    题目描述 现有n个砝码,重量分别为a1,a2,a3,……,an,在去掉m个砝码后,问最多能称量出多少不同的重量(不包括0). 输入输出格式 输入格式: 输入文件weight.in的第1行为有两个整数n ...

  8. NAND闪存供过于求的情况今年会有所好转吗?

    2018年,NAND闪存全年供过于求,价格一直下跌,导致西数.东芝等厂商毛利率大幅下滑.如今到了2019年,情况会有所好转吗? 近日,集邦科技旗下半导体研究中心DRAMeXchange发布调查报告指出 ...

  9. 关于Binder,作为应用开发者你需要知道的全部

    作者:rushjs https://www.jianshu.com/p/062a6e4f5cbe github 地址: https://github.com/rushgit/zhongwenjun.g ...

  10. HTML条件注释

    前面的话 IE条件注释是微软从IE5开始就提供的一种非标准逻辑语句,作用是可以灵活的为不同IE版本浏览器导入不同html元素.很显然这种方法的最大好处就在于属于微软官方给出的兼容解决办法而且还能通过W ...