洛谷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
14 15 2 3
8 5 12 9
11 10 7 6
14 15 2 3
12 9 8 5
7 6 11 10
#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-魔术数字游戏的更多相关文章
- 「区间DP」「洛谷P1043」数字游戏
「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...
- P1274 魔术数字游戏 naive搜索+剪枝
真的naive...... 我把所有能剪的枝都剪了才过的.否则就是TTT 还有个很神奇的事:数组作为参数传进递归函数时会造成上一层函数里的数组的改变.这个我TM调了一天. 下面奉上代码 #includ ...
- 洛谷P1288 取数游戏II(博弈)
洛谷P1288 取数游戏II 先手必胜的条件需要满足如下中至少 \(1\) 条: 从初始位置向左走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 从初始位置向右走到第一 ...
- 洛谷 P2602 [ZJOI2010]数字计数
洛谷 第一次找规律A了一道紫题,写篇博客纪念一下. 这题很明显是数位dp,但是身为蒟蒻我不会呀,于是就像分块打表水过去. 数据范围是\(10^{12}\),我就\(10^6\)一百万一百万的打表. 于 ...
- BZOJ1059或洛谷1129 [ZJOI2007]矩阵游戏
BZOJ原题链接 洛谷原题链接 通过手算几组例子后,很容易发现,同一列的\(1\)永远在这一列,且这些\(1\)有且仅有一个能产生贡献,行同理. 所以我们可以只考虑交换列,使得每一行都能匹配一个\(1 ...
- BZOJ1833或洛谷2602 [ZJOI2010]数字计数
BZOJ原题链接 洛谷原题链接 又是套记搜模板的时候.. 对\(0\sim 9\)单独统计. 定义\(f[pos][sum]\),即枚举到第\(pos\)位,前面枚举的所有位上是当前要统计的数的个数之 ...
- bzoj 4816: 洛谷 P3704: [SDOI2017]数字表格
洛谷很早以前就写过了,今天交到bzoj发现TLE了. 检查了一下发现自己复杂度是错的. 题目传送门:洛谷P3704. 题意简述: 求 \(\prod_{i=1}^{N}\prod_{j=1}^{M}F ...
- 【题解】洛谷P1080 [NOIP2012TG] 国王游戏(贪心+高精度)
次元传送门::洛谷P1080 思路 我们模拟一下只有两个大臣的时候发现 当a1∗b1<a2∗b2是ans1<ans2 所以我们对所有大臣关于左右手之积进行排序 得到最多钱的大臣就是 ...
- 洛谷P4606 [SDOI2018]战略游戏 【圆方树 + 虚树】
题目链接 洛谷P4606 双倍经验:弱化版 题解 两点之间必经的点就是圆方树上两点之间的圆点 所以只需建出圆方树 每次询问建出虚树,统计一下虚树边上有多少圆点即可 还要讨论一下经不经过根\(1\)的情 ...
随机推荐
- Netty实战十之编解码器框架
编码和解码,或者数据从一种特定协议的格式到另一种格式的转换.这些任务将由通常称为编解码器的组件来处理.Netty提供了多种组件,简化了为了支持广泛的协议而创建自定义的编解码器的过程.例如,如果你正在构 ...
- Java基础IO流(四)序列化与反序列化
对象的序列化与反序列化: 对象的序列化,就是将Object转换成byte序列,反之叫对象的反序列化. 序列化流(ObjectOutInputStream),是过滤流 -------writeObjec ...
- chorme type=file 延迟5-8秒
原文地址:http://www.piaoyi.org/computer/Google-Chrome-input-file-delay-3-5.html 原先写法: <button type=&q ...
- module.js:549 throw err;
解决方法: 1.有可能是拼写错误 2.未明原因. (1)删除 node_modules 文件夹 (2)cnpm cache clean,不过提示错误就用 cnpm cache clean --forc ...
- 正则去除html字符串中的注释、标签、属性
var str = '<!-- 注释1 --><h1 style="color:#00ff00;text-align: center;">ProsperLe ...
- tomcat闪退解决
异常原因:拷贝了一个tomcat到新机器上,运行startup闪退 解决方法: 1.检查发现当前系统没有安装配置jdk,安装配置后运行仍然闪退 2.在tomcat的启动脚本和关闭脚本中指定JDK和to ...
- leetcode-217存在重复元素
leetcode-217存在重复元素 题意 给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 示例 1: ...
- CSS回顾(常见问题解决)
一.margin的塌陷解决: BFC (block format context)块级格式化上下文格式 display:inline-block float:left / right overflow ...
- 浅析C/C++中的switch/case陷阱
浅析C/C++中的switch/case陷阱 先看下面一段代码: 文件main.cpp #include<iostream> using namespace std; int main(i ...
- (转载)解决NVIDIA显卡驱动“没有找到兼容的图形硬件”的问题
(转载)解决NVIDIA显卡驱动“没有找到兼容的图形硬件”的问题 原出处:http://www.cnblogs.com/longdouhzt/archive/2012/02/28/2370660.ht ...