1671: 数字拼图

时间限制: 1 Sec  内存限制: 16 MB
提交: 34  解决: 19
[提交][状态][讨论版]

题目描述

拼图游戏即在任意一个N*N(N>1)的拼图中,会把一张完整的图片裁切成N*N块,去掉尾部一块,然后打乱顺序,通过调换空格块与邻块的位置来还原图片。为了方便计算,我们规定右下角最后一块图片为空,用0代替,其余每一块图片用从1~N*N-1的数字来表示。我们简单示范一下数字拼图的操作吧。

例如3*3的拼图

142

835

670

可以通过0与其他数字横竖交换得到新的拼图

142

830

675

中间可进行无限次0与其他数字的交换。我们最终需要将整张图还原为

123

456

780

我们需要做的就是计算数字拼图还原。是计算还原所需最小的步数吗?当然不是,那对于现在的你们来说还有点困难。我们就从简单的开始吧。首先为了简化操作可以将规定2<=N<=4。

问:任意给一个N*N数字矩阵,能否证明:经过无限次的交换,一定能到达目标矩阵或者经过无限的交换也不能实现目标矩阵?如果能输出YES,如果不能输出NO。

输入

第一行输出N,接下来为(0~N*N-1)的数字矩阵。同行数字间保证有一空格。我们保证一开始0在右下角,且数字符合要求。N为0结束。

输出

如果能还原输出YES,如果不能还原输出NO。

样例输入

3
1 2 3
4 5 6
7 8 0 2
3 2
1 0 0

样例输出

YES
NO

提示

本题有两种解题思路,一种可以采用模拟解法,将整个过程模拟下来得出答案,另外还可以根据线性代数的逆序数思维求解更简洁。

逆序数:把矩阵按照从左到右从上到下顺序依次排列,然后查找逆序数是偶数还是奇数,依据逆序数的奇偶性来判断能否还原

拼图游戏的数学原理

#include<bits/stdc++.h>
using namespace std;
const int maxn=100;
int a[maxn][maxn],b[maxn*maxn];
int main()
{
int n,i,j;
while(cin>>n&&n)
{
int k=0;
int sum=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
cin>>a[i][j];
b[k++]=a[i][j];
}
int K=k;
for(i=0;i<K-1;i++)
{
for(j=i+1;j<K-1;j++) if(b[i]>b[j]) sum+=1;
}
if(b[K-1]==0)
{
if(sum%2!=0) cout<<"NO\n";
else cout<<"YES\n";
}
else
{
if(sum%2==0) cout<<"NO\n";
else cout<<"YES\n";
}
}
return 0;
}

SUST OJ 1671: 数字拼图的更多相关文章

  1. 九度OJ 1544 数字序列区间最小值

    题目地址:http://ac.jobdu.com/problem.php?pid=1544 题目描述: 给定一个数字序列,查询任意给定区间内数字的最小值. 输入: 输入包含多组测试用例,每组测试用例的 ...

  2. 九度OJ 1349 数字在排序数组中出现的次数 -- 二分查找

    题目地址:http://ac.jobdu.com/problem.php?pid=1349 题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数 ...

  3. 华为 oj 表示数字(代码有参考)理解算法设计

    虽然是初级题目,但是 也不是太容易就做出来的 还是用c++ 好些 因为c++ string 是可以存储到缓冲区的, 字符串长度可以变化 参考了某神的代码 和我的思路一样 ,就拿来主义了,挺经典的一道面 ...

  4. SUST OJ 1641: 电子狗的心事

    1641: 电子狗的心事 时间限制: 1 Sec  内存限制: 128 MB提交: 192  解决: 14[提交][状态][讨论版] 题目描述 计算机程序世界中有一位孤独的电子狗,这个电子狗每次只能执 ...

  5. 九度oj 1349 数字在排序数组中出现的次数

    原题链接:http://ac.jobdu.com/problem.php?pid=1349 二分.. #include<algorithm> #include<iostream> ...

  6. SUST OJ 1642: 绝地求生—死亡顺序

    1642: 绝地求生-死亡顺序 时间限制: 1 Sec  内存限制: 128 MB提交: 81  解决: 53[提交][状态][讨论版] 题目描述 最近陕西科技大学六公寓的小东同学深深的入迷了一款游戏 ...

  7. SUST OJ 1675: Fehead的项目(单调栈)

    1675: Fehead的项目 时间限制: 1 Sec  内存限制: 128 MB提交: 41  解决: 27[提交][状态][讨论版] 题目描述 Fehead俱乐部接手了一个项目,为了统计数据,他们 ...

  8. SUST OJ 1674: 入侵与反击(最长不下降子序列)

    1674: 入侵与反击 时间限制: 1 Sec  内存限制: 128 MB提交: 229  解决: 28[提交][状态][讨论版] 题目描述 A国部署的反导系统遇到了一个致命BUG,那就是每一次发射的 ...

  9. 利用Vue.js实现拼图游戏

    之前写过一篇<基于Vue.js的表格分页组件>的文章,主要介绍了Vue组件的编写方法,有兴趣的可以访问这里进行阅读:http://www.cnblogs.com/luozhihao/p/5 ...

随机推荐

  1. 雷林鹏分享:C# 枚举(Enum)

    C# 枚举(Enum) 枚举是一组命名整型常量.枚举类型是使用 enum 关键字声明的. C# 枚举是值数据类型.换句话说,枚举包含自己的值,且不能继承或传递继承. 声明 enum 变量 声明枚举的一 ...

  2. WPF操作RichTextBox

    http://www.cnblogs.com/wzwyc/p/6291895.html

  3. English trip -- VC(情景课)10 B Around the house 在家里

    Vocablulary focus  核心词汇 cook play the guitar listen to music watch TV read magazines work in the gar ...

  4. LeetCode--190--颠倒二进制位

    问题描述: 颠倒给定的 32 位无符号整数的二进制位. 示例: 输入: 43261596 输出: 964176192 解释: 43261596 的二进制表示形式为 000000101001010000 ...

  5. 问题✅:render json的格式支持。to_json被改成as_json,功能一样

    class StudentsController < ApplicationController def show @student = Student.find(params[:id]) re ...

  6. homestead 添加新站点

    homestead 添加站点的时候遇到了坑,这里记录下来,也顺便给大家一个参考. 1. 首先修改homestead.yaml文件(虽然你有可能不知道这个文件在哪,但是我也不会帮你找的.) 2. 接着修 ...

  7. hdu1238 kmp

    You are given a number of case-sensitive strings of alphabetic characters, find the largest string X ...

  8. notepad++插件安装

    notepad安装目录的  plugins 下重启 notepad.exe程序即可 插件下载地址  : https://sourceforge.net/projects/npp-plugins/fil ...

  9. vuex 简单理解

    废话不多说,直接上图!                 不懂的 参考 API

  10. start with...connect by子句的浅用

    start with的用法,其基本语法如下: select … from tablename start with 条件1connect by 条件2where 条件3; 但是我在pl/sql中写入以 ...