poj2893 M×N puzzle
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的更多相关文章
- 【POJ2893&HDOJ6620】M × N Puzzle(n*m数码判定)
题意:给定一个n*m的矩阵,其中不重复地填[0,n*m-1],问是否能通过有限步数将0移到右下角 n,m<=1e3 思路:结论题 当板子了 #include<bits/stdc++.h&g ...
- poj2893 M*N puzzle 【n*m数码问题小结】By cellur925
题目传送门 这个问题是来源于lydrainbowcat老师书上讲排序的一个扩展.当时讲的是奇数码问题,其实这种问题有两种问法:一种局面能否到另一种局面.到达目标局面的最小步数. 本文部分内容引用于ly ...
- POJ 2893 M × N Puzzle(树状数组求逆序对)
M × N Puzzle Time Limit: 4000MS Memory ...
- hdu 5465 Clarke and puzzle 二维线段树
Clarke and puzzle Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...
- M × N Puzzle POJ - 2893(奇数码)
The Eight Puzzle, among other sliding-tile puzzles, is one of the famous problems in artificial inte ...
- HDU 5465 Clarke and puzzle Nim游戏+二维树状数组
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5465 Clarke and puzzle Accepts: 42 Submissions: 26 ...
- POJ 2983 M × N Puzzle
M × N Puzzle Time Limit: 4000MS Memory Limit: 131072K Total Submissions: 4860 Accepted: 1321 Des ...
- 【LeetCode】773. Sliding Puzzle 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/sliding- ...
- Puzzle 面向服务/切面(AOP/IOC)开发框架 For .Net
Puzzle 面向服务/切面AOP开发框架 For .Net AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效 ...
随机推荐
- 剑指offer(5)
题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解法: 一个栈专门用来存数,当需要输出数时,把所有数倒到第二个栈,当然,若此时第二个栈中已经有数了(之前倒 ...
- js 解决中文乱码的问题
1.对象 request response 对象setCharacterEncoding=UTF-8 1 <%@ page language="java" contentTy ...
- python(Django之Logging、API认证)
一.Loging模块 用于方便的记录日志的模块 import logging logging.basicConfig(filename='log.log', format='%(asctime)s - ...
- H5的使用
1.h5的部分标签浏览器兼容性问题 解决方案: <head> <!--[if lt IE 9]> <script src="http://cdn.static ...
- logging 实例
import logging from logging.handlers import RotatingFileHandler import os FILE_DIR = os.path.join(os ...
- fiddler 笔记-重定向
重定向功能:主要是进行会话的拦截,然后替换原始资源的功能 选择请求-到autoresponser面板-勾选 enable rules :add rules 设置如下: 2 在浏览器中请示url-页面跳 ...
- The Bug and Exception of Hibernate
1: hibernate4.3.5 的@oneToOne注解有Bug,建议不使用该版本,或者使用该版本不使用@table annotation. 2:今天在用hibernate4.2.13的时候, ...
- 官网下载旧版本jdk,老版本jdk,jdk1.7,jdk1.8
1.进入中文oracle官网(不是国内官网下载速度超级慢): http://www.oracle.com/technetwork/cn/indexes/downloads/index.html 2.进 ...
- Jenkins+PowerShell持续集成环境搭建(三)Web项目
1. 新建一个名字为HelloWorld.Web的Freesyle项目: 2. 配置源码管理: 3. 编译配置: 版本:选择MSBuild4 文件:D:\CI\Config\HelloWorld.We ...
- codeforces559B
Equivalent Strings CodeForces - 559B Today on a lecture about strings Gerald learned a new definitio ...