Problem 洛谷P1274-魔术数字游戏

Accept: 118    Submit: 243
Time Limit: 1000 mSec    Memory Limit : 128MB

Problem Description

填数字方格的游戏有很多种变化,如下图所示的4×4方格中,我们要选择从数字1到16来填满这十六个格子(Aij,其中i=1..4,j=1..4)。为了让游戏更有挑战性,我们要求下列六项中的每一项所指定的四个格子,其数字累加的和必须为34:

四个角落上的数字,即A11+A14+A41+A44=34。

每个角落上的2×2方格中的数字,例如左上角:A11+A12+A21+A22=34。

最中间的2×2方格中的数字,即A22+A23+A32+A33=34。

每条水平线上四个格子中的数字,即Ai1+Ai2+Ai3+Ai4=34,其中i=1..4。

每条垂直线上四个格子中的数字,即A1j+A2j+A3j+A4j=34,其中j=1..4。

两条对角线上四个格子中的数字,例如左上角到右下角:A11+A22+A33+A44=34。

右上角到左下角:A14+A23+A32+A41=34

 Input

输入文件会指定把数字1先固定在某一格内。输入的文件只有一行包含两个正数据I和J,表示第1行和第J列的格子放数字1。剩下的十五个格子,请按照前述六项条件用数字2到16来填满。

 Output

把全部的正确解答用每4行一组写到输出文件,每行四个数,相邻两数之间用一个空格隔开。两组答案之间,要以一个空白行相间,并且依序排好。排序的方式,是先从第一行的数字开始比较,每一行数字,由最左边的数字开始比,数字较小的解答必须先输出到文件中。

 

 Sample Input

1 1

Sample output

1 4 13 16
14 15 2 3
8 5 12 9
11 10 7 6
 
1 4 13 16
14 15 2 3
12 9 8 5
7 6 11 10
 
题目链接:https://www.luogu.org/problemnew/show/P1274
 
题解:无脑爆搜就好,剪枝的话就按照题目说的剪,代码比较冗长
 
 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std; const int maxn = ; int gra[maxn][maxn];
bool used[maxn*]; void output(){
for(int i = ;i <= ;i++){
printf("%d",gra[i][]);
for(int j = ;j <= ;j++){
printf(" %d",gra[i][j]);
}
printf("\n");
}
printf("\n");
} void dfs(int x,int y){
if(x > ){
output();
return;
}
if(gra[x][y] == ){
if(x== && y==){
if(gra[][]+gra[][]+gra[][]+gra[][] != ) return;
}
if(x== && y==){
if(gra[][]+gra[][]+gra[][]+gra[][] != ) return;
}
if(x== && y==){
if(gra[][]+gra[][]+gra[][]+gra[][] != ) return;
}
if(x== && y==){
if(gra[][]+gra[][]+gra[][]+gra[][] != ) return;
if(gra[][]+gra[][]+gra[][]+gra[][] != ) return;
if(gra[][]+gra[][]+gra[][]+gra[][] != ) return;
}
if(x== && y==){
if(gra[][]+gra[][]+gra[][]+gra[][] != ) return;
}
if(x== && y==){
if(gra[][]+gra[][]+gra[][]+gra[][] != ) return;
}
if(x == ){
if(gra[][y]+gra[][y]+gra[][y]+gra[][y] != ) return;
}
if(y == ){
if(gra[x][]+gra[x][]+gra[x][]+gra[x][] != ) return;
}
if(y == ) dfs(x+,);
else dfs(x,y+);
}
else{
for(int i = ;i <= ;i++){
if(!used[i]){
//output();
gra[x][y] = i;
if(x== && y==){
if(gra[][]+gra[][]+gra[][]+gra[][] != ){
gra[x][y] = ;
continue;
}
}
if(x== && y==){
if(gra[][]+gra[][]+gra[][]+gra[][] != ){
gra[x][y] = ;
continue;
}
}
if(x== && y==){
if(gra[][]+gra[][]+gra[][]+gra[][] != ){
continue;
gra[x][y] = ;
}
}
if(x== && y==){
if(gra[][]+gra[][]+gra[][]+gra[][] != ){
gra[x][y] = ;
continue;
}
if(gra[][]+gra[][]+gra[][]+gra[][] != ){
gra[x][y] = ;
continue;
}
if(gra[][]+gra[][]+gra[][]+gra[][] != ){
gra[x][y] = ;
continue;
}
}
if(x== && y==){
if(gra[][]+gra[][]+gra[][]+gra[][] != ){
gra[x][y] = ;
continue;
}
}
if(x == && y==){
if(gra[][]+gra[][]+gra[][]+gra[][] != ){
gra[x][y] = ;
continue;
}
}
if(x == ){
if(gra[][y]+gra[][y]+gra[][y]+gra[][y] != ){
gra[x][y] = ;
continue;
}
}
if(y == ){
if(gra[x][]+gra[x][]+gra[x][]+gra[x][] != ){
gra[x][y] = ;
continue;
}
}
used[i] = true;
if(y == ) dfs(x+,);
else dfs(x,y+);
used[i] = false;
gra[x][y] = ;
}
}
}
} int main()
{
//freopen("input.txt","r",stdin);
int x,y;
scanf("%d%d",&x,&y);
memset(gra,,sizeof(gra));
memset(used,false,sizeof(used));
gra[x][y] = ;
used[] = true;
dfs(,);
return ;
}

洛谷P1274-魔术数字游戏的更多相关文章

  1. 「区间DP」「洛谷P1043」数字游戏

    「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...

  2. P1274 魔术数字游戏 naive搜索+剪枝

    真的naive...... 我把所有能剪的枝都剪了才过的.否则就是TTT 还有个很神奇的事:数组作为参数传进递归函数时会造成上一层函数里的数组的改变.这个我TM调了一天. 下面奉上代码 #includ ...

  3. 洛谷P1288 取数游戏II(博弈)

    洛谷P1288 取数游戏II 先手必胜的条件需要满足如下中至少 \(1\) 条: 从初始位置向左走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 从初始位置向右走到第一 ...

  4. 洛谷 P2602 [ZJOI2010]数字计数

    洛谷 第一次找规律A了一道紫题,写篇博客纪念一下. 这题很明显是数位dp,但是身为蒟蒻我不会呀,于是就像分块打表水过去. 数据范围是\(10^{12}\),我就\(10^6\)一百万一百万的打表. 于 ...

  5. BZOJ1059或洛谷1129 [ZJOI2007]矩阵游戏

    BZOJ原题链接 洛谷原题链接 通过手算几组例子后,很容易发现,同一列的\(1\)永远在这一列,且这些\(1\)有且仅有一个能产生贡献,行同理. 所以我们可以只考虑交换列,使得每一行都能匹配一个\(1 ...

  6. BZOJ1833或洛谷2602 [ZJOI2010]数字计数

    BZOJ原题链接 洛谷原题链接 又是套记搜模板的时候.. 对\(0\sim 9\)单独统计. 定义\(f[pos][sum]\),即枚举到第\(pos\)位,前面枚举的所有位上是当前要统计的数的个数之 ...

  7. bzoj 4816: 洛谷 P3704: [SDOI2017]数字表格

    洛谷很早以前就写过了,今天交到bzoj发现TLE了. 检查了一下发现自己复杂度是错的. 题目传送门:洛谷P3704. 题意简述: 求 \(\prod_{i=1}^{N}\prod_{j=1}^{M}F ...

  8. 【题解】洛谷P1080 [NOIP2012TG] 国王游戏(贪心+高精度)

    次元传送门::洛谷P1080 思路 我们模拟一下只有两个大臣的时候发现 当a1​∗b1​<a2​∗b2​是ans1<ans2 所以我们对所有大臣关于左右手之积进行排序 得到最多钱的大臣就是 ...

  9. 洛谷P4606 [SDOI2018]战略游戏 【圆方树 + 虚树】

    题目链接 洛谷P4606 双倍经验:弱化版 题解 两点之间必经的点就是圆方树上两点之间的圆点 所以只需建出圆方树 每次询问建出虚树,统计一下虚树边上有多少圆点即可 还要讨论一下经不经过根\(1\)的情 ...

随机推荐

  1. Netty实战十之编解码器框架

    编码和解码,或者数据从一种特定协议的格式到另一种格式的转换.这些任务将由通常称为编解码器的组件来处理.Netty提供了多种组件,简化了为了支持广泛的协议而创建自定义的编解码器的过程.例如,如果你正在构 ...

  2. Java基础IO流(四)序列化与反序列化

    对象的序列化与反序列化: 对象的序列化,就是将Object转换成byte序列,反之叫对象的反序列化. 序列化流(ObjectOutInputStream),是过滤流 -------writeObjec ...

  3. chorme type=file 延迟5-8秒

    原文地址:http://www.piaoyi.org/computer/Google-Chrome-input-file-delay-3-5.html 原先写法: <button type=&q ...

  4. module.js:549 throw err;

    解决方法: 1.有可能是拼写错误 2.未明原因. (1)删除 node_modules 文件夹 (2)cnpm cache clean,不过提示错误就用 cnpm cache clean --forc ...

  5. 正则去除html字符串中的注释、标签、属性

    var str = '<!-- 注释1 --><h1 style="color:#00ff00;text-align: center;">ProsperLe ...

  6. tomcat闪退解决

    异常原因:拷贝了一个tomcat到新机器上,运行startup闪退 解决方法: 1.检查发现当前系统没有安装配置jdk,安装配置后运行仍然闪退 2.在tomcat的启动脚本和关闭脚本中指定JDK和to ...

  7. leetcode-217存在重复元素

    leetcode-217存在重复元素 题意 给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 示例 1: ...

  8. CSS回顾(常见问题解决)

    一.margin的塌陷解决: BFC (block format context)块级格式化上下文格式 display:inline-block float:left / right overflow ...

  9. 浅析C/C++中的switch/case陷阱

    浅析C/C++中的switch/case陷阱 先看下面一段代码: 文件main.cpp #include<iostream> using namespace std; int main(i ...

  10. (转载)解决NVIDIA显卡驱动“没有找到兼容的图形硬件”的问题

    (转载)解决NVIDIA显卡驱动“没有找到兼容的图形硬件”的问题 原出处:http://www.cnblogs.com/longdouhzt/archive/2012/02/28/2370660.ht ...