• POJ 2893 M × N Puzzle


    逆序对

    n 数码问题的扩展
    对于一个n * m 的问题来说,结论和 列数 m 奇偶有关
    对于 m 是奇数来说 , 两个局面互相可达,当且仅当这两个局面按顺序写成一个数列,这个数列的逆序对数的奇偶性相同
    对于 m 是偶数来说, 两个局面互相可达,当且仅当这两个局面按顺序写成一个数列,这个数列的逆序对数的差与空格所在的行数差的奇偶性相同
    (证明 ,不存在的)

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <cmath>
    using namespace std;
    const int MAXN = 1000005;
    int init() {
    	int rv = 0, fh = 1;
    	char c = getchar();
    	while(c < '0' || c > '9') {
    		if(c == '-') fh = -1;
    		c = getchar();
    	}
    	while(c >= '0' && c <= '9') {
    		rv = (rv<<1) + (rv<<3) + c - '0';
    		c = getchar();
    	}
    	return fh * rv;
    }
    int n, m, tot, a[MAXN], ans, b[MAXN];
    void merge_sort(int l, int r) {
    	if(l == r) return;
    	int mid = (l + r) >> 1;
    	merge_sort(l, mid);
    	merge_sort(mid + 1, r);
    	int i = l, j = mid + 1;
    	for(int k = l; k <= r; k++) {
    		if(j > r || (i <= mid && a[i] < a[j])) b[k] = a[i++];
    		else b[k] = a[j++], ans += mid - i + 1;
    	}
    	for(int k = l; k <= r; k++) a[k] = b[k];
    }
    int main() {
    	while(1) {
    		n = init(); m = init();
    		if(!n && !m) break;
    		ans = 0;tot = 0;
    		int tag = 0;
    		for(int i = 1; i <= n * m; i++) {
    			int t = init();
    			if(t) {
    				a[++tot] = t;
    			}
    			else tag = ceil((double)i / m);
    		}
    		//for(int i = 1; i <= tot; i++) printf("%d ", a[i]);
    		merge_sort(1, tot);
    		//cout << ans << endl;
    		if(m & 1) {
    			if(ans & 1) printf("NO
    ");
    			else printf("YES
    ");
    		}else {
    			if((ans & 1) != ((n - tag) & 1)) printf("NO
    ");
    			else printf("YES
    ");
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    2 实现第一个Django网站 博客
    jeecms支持的freemaker标签大全
    dao 获取表最大排序实现
    spring对数据库特殊字段的支持
    hibernate id生成器配置
    Long与long的比较
    jquery validation ajax 验证
    swfupload用法总结
    oracle对序列的操作
    jquery.layout框架分割线
  • 原文地址:https://www.cnblogs.com/Mr-WolframsMgcBox/p/8626001.html
Copyright © 2020-2023  润新知