UVALive 6849 Landmine Cleaner(贪心、扫雷经典游戏)
题意:
给定N,M≤1000的数字雷图,试恢复原来的雷图,输入保证答案唯一给定N,M\le 1000的数字雷图, 试恢复原来的雷图, 输入保证答案唯一
有雷的格子显示3+9宫格雷数,无雷的格子显示0+9宫格雷数有雷的格子显示3+9宫格雷数, 无雷的格子显示0+9宫格雷数
分析:
1 2 3 4 5 6 7 8 9 我们以3∗3的数字雷图为例,如上图我们以3*3的数字雷图为例, 如上图
- 记ai:=显示数,ansi:=有雷与否记a_i:=显示数, ans_i:=有雷与否
观察1号格子,它掌控4个格子,若无雷显示[0,3],有雷则显示[4,8],显然我们可以得到ans1=a1>3观察1号格子, 它掌控4个格子, 若无雷显示[0,3], 有雷则显示[4,8],显然我们可以得到ans_1=a_1>3
确定有雷之后我们把多余的3减去,也就是 if(ansi) ai−=3确定有雷之后我们把多余的3减去,也就是\ if(ans_i)\ \ a_i-=3
接下来我们观察4号格子,我们可以发现一个等式a4−a1=ans7+ans8<=2(多余的3已经减去了)接下来我们观察4号格子, 我们可以发现一个等式a_4-a_1=ans_7+ans_8
那么显然如果a4−a1>2的话这个格子一定有雷了那么显然如果a_4-a_1>2的话这个格子一定有雷了- 接下来我们观察2,5两个格子,我们在a2的基础上减掉前一列也就是ans1和ans4的影响接下来我们观察2,5两个格子, 我们在a_2的基础上减掉前一列也就是ans_1和ans_4的影响
我们发现,此时问题跟刚才一样了,同样的4个格子,ans2=a2>3我们发现, 此时问题跟刚才一样了, 同样的4个格子, ans_2=a_2>3
对于5号格子显然可以得到ans5=a1−ans1−ans2−ans4对于5号格子显然可以得到ans_5=a_1-ans_1-ans_2-ans_4- 接下来我们只要重复这个过程就可以得到所有格子的答案了接下来我们只要重复这个过程就可以得到所有格子的答案了
- 注意最后一行的时候,消除前一列的影响的时候,仅仅只有一个格子注意最后一行的时候,消除前一列的影响的时候, 仅仅只有一个格子
- 除了消去前一列的影响,每次计算还要消去前一行的影响除了消去前一列的影响,每次计算还要消去前一行的影响
这种题debug还是自己写数据生成器吧这种题debug还是自己写数据生成器吧
代码:
//
// Created by TaoSama on 2015-12-12
// Copyright (c) 2015 TaoSama. All rights reserved.
//
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <algorithm>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <string>
#include <set>
#include <vector>using namespace std;
#define pr(x) cout << #x << " = " << x << " "
#define prln(x) cout << #x << " = " << x << endl
const int N = 1e3 + 10, INF = 0x3f3f3f3f, MOD = 1e9 + 7;int n, m, a[N][N];
bool ans[N][N];void setMine(int i, int j) {ans[i][j] = true;a[i][j] -= 3;
}void delLastColumn(int i, int j) {a[i][j] -= ans[i][j - 1];if(i < n) a[i][j] -= ans[i + 1][j - 1];
}void see(int i, int j) {printf("a[%d][%d] = %d ans: %d\n", i, j, a[i][j], ans[i][j]);
}int main() {
#ifdef LOCALfreopen("C:\\Users\\TaoSama\\Desktop\\in.txt", "r", stdin);
// freopen("C:\\Users\\TaoSama\\Desktop\\out.txt","w",stdout);
#endifios_base::sync_with_stdio(0);int t; scanf("%d", &t);while(t--) {scanf("%d%d", &n, &m);memset(a, 0, sizeof a);for(int i = 1; i <= n; ++i)for(int j = 1; j <= m; ++j)scanf("%d", &a[i][j]);memset(ans, false, sizeof ans);for(int i = 1; i <= n; i += 2) {for(int j = 1; j <= m; ++j) //delete last linea[i][j] -= ans[i - 1][j - 1] + ans[i - 1][j] + ans[i - 1][j + 1];//is mineif(a[i][1] > 3) setMine(i, 1);//only 2 leftif(a[i + 1][1] - a[i][1] > 2) setMine(i + 1, 1);for(int j = 2; j <= m; ++j) {
// see(i, j);delLastColumn(i, j);
// see(i, j);if(a[i][j] > 3) setMine(i, j);ans[i + 1][j] = a[i][j - 1] - ans[i][j - 1] - ans[i + 1][j - 1] - ans[i][j];}}for(int i = 1; i <= n; ++i) {for(int j = 1; j <= m; ++j)putchar("-L"[ans[i][j]]);puts("");}}return 0;
}
UVALive 6849 Landmine Cleaner(贪心、扫雷经典游戏)相关推荐
- 经典Windows 扫雷小游戏源码 展示
这个扫雷小游戏是通过Easy X实现,Easy X是很多小萌新手在学习的时候用到的一个绘图工具,想必大家对他已经很熟悉了. 所以如果有小伙伴感兴趣的话,可以联系我获取Easy X的安装程序及其源代码. ...
- C语言系列(1) --- C语言实现经典扫雷小游戏
(一)游戏简介 游戏初始界面有两个选择,选项"1"为开始游戏,选项"0"为退出游戏:选择开始游戏之后将会打印出9*9的棋盘,此时系统已经为游戏设置了10个雷,输 ...
- python vector_50行Python代码实现经典游戏,不仅是划水神器,更是学习利器!
Free Python Games非常适合学生,它不仅具有高度的组织性和灵活性,而且能够激发人们探索和理解能力.--Terri Furton Free Python Games在轻松的环境中把游戏和学 ...
- python玩扫雷_python实现扫雷小游戏
前面我们用python实现了贪吃蛇.坦克大战.飞船大战.五子棋等游戏 今天我们用python来实现一下扫雷游戏 本游戏代码量和源文件较多 可以从我的GitHub地址中获取 构建地雷区import ra ...
- 《扫雷》游戏递归算法分析
扫雷游戏中在点击空白块的时候,如果遇到了数字为空的空白块那么他会自动的帮助点击空板块周围的所有空白块.那么在自动点开的空白块中还是遇到了数字为空的空白块,他就又会帮助点击其周围的空白块. 效果如下图: ...
- C#,桌面游戏编程,编写制作《扫雷》游戏代码的实现——需求分析与总体架构设计
先看看<扫雷> 的思维导图,再看动画演示. 部分功能的动画演示,下面有更全的. 本文为<C#扫雷游戏开发实战>系列文章第三 1.C#,扫雷游戏(Minesweeper)之壹-- ...
- 基于Java+Swing实现《扫雷》游戏
基于Java+Swing实现<扫雷>游戏 一.系统介绍 二.功能展示 三.其他系统 四.获取源码 一.系统介绍 windows自带的游戏<扫雷>是陪伴了无数人的经典游戏,本程序 ...
- JAVA 实现《扫雷》游戏|CSDN创作打卡
前言 windows自带的游戏<扫雷>是陪伴了无数人的经典游戏,本程序参考<扫雷>的规则进行了简化,用java语言实现,采用了swing技术进行了界面化处理,设计思路用了面向对 ...
- 《扫雷》游戏初始化数据算法分析
数据初始化,可以分为两个步骤.第一个步骤就是随即生成雷的位置,第二个步骤就是根据雷的位置计算每一个非雷的方格的雷的数量. LeiStatus:雷的状态,在整个方格中他只有两种可能,要么他是雷,要么他是 ...
最新文章
- Mac brew安装maven
- 和公婆住在一起是什么体验?
- flume消费kafka数据太慢_kafka补充01
- TypeError: tensor is not a torch image.
- Slider控件的使用方法
- vue 配置sass、scss全局变量
- 今天没发程序!HOHO!!!
- 【.NET6+WPF】WPF使用prism框架+Unity IOC容器实现MVVM双向绑定和依赖注入
- Powershell 创建NetWork Location(盘符快捷方式)
- 苹果cms 压缩html,解密苹果cms的player.js文件
- wifi下adb连接电脑控制手机屏幕
- CDA LEVEL I分数占比解读,看懂这些,考试更容易拿分
- 电路交换 报文交换 分组交换的区别
- python中的pip什么意思-python中的pip
- 销售竞争情报实战--徐凌云老师
- Java开发面试题目,java培训老师第一次讲课
- Java解压缩技术(三)BZIP2压缩-解压缩
- datagrip连接mysql数据库失败
- MTK IMS框架简析(2)——IMS注册过程
- 微信公众号提示:redirect_uri 参数错误