洛谷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\)的情 ...
随机推荐
- 【Java每日一题】20170301
20170228问题解析请点击今日问题下方的“[Java每日一题]20170301”查看(问题解析在公众号首发,公众号ID:weknow619) package Mar2017; public cla ...
- hive 导出如数为csv格式
hive导出csv格式的数据 命令如下: hive -e "select concat_ws(',',appKey,clickJson) adt.jsontest as st from &q ...
- 使用laravel框架开发接口时ajax post请求报错419
nginx服务器,使用laravel框架开发后台接口.get请求正常,但是post请求一直报错.H5和APP都不成功,code=419. 解决办法: 找到 VerifyCsrfToken.php文件( ...
- CSS3动画属性:变形(transform)
Transform字面上就是变形,改变的意思.在CSS3中transform主要包括以下几种:旋转rotate.扭曲skew.缩放scale和移动translate以及矩阵变形matrix. 语法 t ...
- 你用过CSS3的这个currentColor新属性吗?使用与兼容性
currentColor顾名思意就是“当前颜色”,准确讲应该是“当前的文字颜色”,例如: .xxx { border: 1px solid currentColor; } currentColor表示 ...
- chrome离线包出现的小问题
网友使用离线包时出现的一些小问题,在此做个记录: 1. @200258 这个版本就是个坑.chrome低版本显示空白,高版本界面乱掉,有反馈出54可以,有说56可以 亲测:即使不用离线包直接FQ,也会 ...
- Android 基本控件的常用属性
TextView //normal 默认 bold 粗体 italic斜体 可用| 多选 android:textStyle //设置限定可以输入哪些字符 android:digits //设置文本可 ...
- Android平台下利用zxing实现二维码开发
Android平台下利用zxing实现二维码开发 现在走在大街小巷都能看到二维码,而且最近由于项目需要,所以研究了下二维码开发的东西,开源的二维码扫描库主要有zxing和zbar,zbar在iPos平 ...
- 我的第一个远程代码库房:建立Github仓库 心得
一直想有一个自己的代码库,搞了两天终于搞定了,把自己的代码上传到github的愿望终于实现了,虽然仅仅是个开始. 在搭建的过程中,吸收了些知识,记录在这里,以作为分享. Git 和 Github 的区 ...
- Java的内存 -JVM 内存管理
一.综述 如果你学过C或者C++,那么你应该感受过它们对内存那种强大的掌控力.但是强大的能力往往需要更强大的控制力才能保证能力不被滥用,如果滥用C/C++的内存管理那么很容易出现指针满天飞的情况,不出 ...