x数码难题有解性判定:

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

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

它回来了!

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

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

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

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

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

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

  1. // poj 2893
  2. #include <cstdio>
  3. #include <cstring>
  4. using namespace std;
  5. const int N = ;
  6. const int N2 = N * N;
  7. int g[N][N];
  8. typedef long long LL;
  9. struct TreeArray {
  10. int a[N2];
  11. void clear() {
  12. memset(a, , sizeof(a));
  13. return;
  14. }
  15. int lowbit(int x) {
  16. return x & (-x);
  17. }
  18. void add(int x, int y) {
  19. if(x == ) {
  20. return;
  21. }
  22. for(int i = x; i < N2; i += lowbit(i)) {
  23. a[i] += y;
  24. }
  25. return;
  26. }
  27. int getsum(int x) {
  28. if(x == ) {
  29. return ;
  30. }
  31. int ans = ;
  32. for(int i = x; i > ; i -= lowbit(i)) {
  33. ans += a[i];
  34. }
  35. return ans;
  36. }
  37. int ask(int l, int r) {
  38. return getsum(r) - getsum(l - );
  39. }
  40. }ta;
  41.  
  42. int main() {
  43. int a, b, xx, yy;
  44. scanf("%d%d", &a, &b);
  45. while(a || b) {
  46. ta.clear();
  47. for(int i = ; i <= a; i++) {
  48. for(int j = ; j <= b; j++) {
  49. scanf("%d", &g[i][j]);
  50. if(!g[i][j]) {
  51. xx = i;
  52. yy = j;
  53. }
  54. }
  55. }
  56. // 本题不用离散化
  57. LL ans = ;
  58. for(int i = a; i >= ; i--) {
  59. for(int j = b; j >= ; j--) {
  60. if(g[i][j]) {
  61. ans += ta.getsum(g[i][j] - );
  62. ta.add(g[i][j], );
  63. }
  64. }
  65. }
  66. if(!(b & )) {
  67. ans += (a - xx);
  68. }
  69. if(ans & ) {
  70. printf("NO\n");
  71. }
  72. else printf("YES\n");
  73. scanf("%d%d", &a, &b);
  74. }
  75. return ;
  76. }

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. 运行Spark-shell,解决Unable to load native-hadoop library for your platform

    启动spark后,运行bin/spark-shell会出现一个警告 提君博客原创 WARN util.NativeCodeLoader: Unable to load native-hadoop li ...

  2. Spring 基于XML配置

    基于XML的配置 对于基于XML的配置,Spring 1.0的配置文件采用DTD格式,Spring2.0以后采用Schema格式,后者让不同类型的配罝拥有了自己的命名空间,使得配置文件更具扩展性.此外 ...

  3. 转《基于Ionic3实现微信支付和支付宝支付》

    在Ionic应用里实现支付并不难,但是有的坑真是不爬不知道. 一:支付宝支付 网上关于支付宝支付cordova插件真是非常多,但是大多会报一些让你很无语的错误.比如sdk早已过时不是最新的,或者没有出 ...

  4. 腾讯机试题 AcWing 603 打怪兽

    题目链接:https://www.acwing.com/problem/content/605/ 题目大意: 略 分析: 用dp[i][j]表示用j元钱能在前i只怪兽上所能贿赂到的最大武力值. 有一种 ...

  5. scala mkstring

    如果你想要把集合元素转化为字符串,可能还会添加分隔符,前缀,后缀. Solution 使用mkString方法来打印一个集合内容,下面给一个简单的例子: scala> val a = Array ...

  6. Yii2的使用

    yii2的下载安装 使用下载好的文件配置高级模板,在配置文件配置好数据库和gii 在common模板配置db: 在backend模板配置gii: 配置nginx服务器访问backend和fronten ...

  7. Java HashMap的put操作(Java1.8)

    https://www.cnblogs.com/JzedyBlogs/p/10208295.html 写得非常好: 这个是Java1.8 ------------------------------- ...

  8. css繼承

    概念:就是上級設置了css屬性,下級默認有同樣的樣式,如果下級需要不一樣的樣式,那麼就需要單獨對下級設置. 範圍: font-family:字體 font-weight:粗細 font-size:尺寸 ...

  9. 遍历map中的内容

    Map<String, CartItem> cartItems = cart.getCartItems();for(Map.Entry<String, CartItem> en ...

  10. CentOS安装GIt、上传项目到git仓库

    上传项目 登录服务器后安装git yum install git 新建文件夹(仓库) mkdir *.git 初始化仓库 git init --bare *.git 在本地初始化仓库 git init ...