P2670 [NOIP2015 普及组] 扫雷游戏
题目背景
NOIP2015 普及组 T2
题目描述
扫雷游戏是一款十分经典的单机小游戏。在 nn 行 mm 列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。
现在给出 nn 行 mm 列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。
注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。
输入格式
第一行是用一个空格隔开的两个整数 nn 和 mm,分别表示雷区的行数和列数。
接下来 nn 行,每行 mm 个字符,描述了雷区中的地雷分布情况。字符 \texttt{*}* 表示相应格子是地雷格,字符 \texttt{?}? 表示相应格子是非地雷格。相邻字符之间无分隔符。
输出格式
输出文件包含 nn 行,每行 mm 个字符,描述整个雷区。用 \texttt{*}* 表示地雷格,用周围的地雷个数表示非地雷格。相邻字符之间无分隔符。
输入输出样例
3 3
*??
???
?*?
*10
221
1*1
2 3
?*?
*??
2*1
*21
说明/提示
对于 100\%100%的数据,1≤n≤100, 1≤m≤1001≤n≤100,1≤m≤100。
题解
/* map类题目,要根据题目信息处理输入输出,使数据易于操纵;从1-n读取数据,避免边界检测*/
#include <cstdio>
int n, m;
int map[105][105];
void input() {
scanf("%d%d", &n, &m);
getchar();
for (int i = 1; i <= n; ++ i) {
for (int j = 1; j <= m; ++ j) {
char ch = getchar();
map[i][j] = (ch=='*') ? -1 : 0;
}
getchar();
}
}
void calc() {
const int dt[][2] = {-1, 0, -1, -1, 0, -1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1};
for (int i = 1; i <= n; ++ i) {
for (int j = 1; j <= m; ++ j) {
if (map[i][j] != -1) {
for (int k = 0; k < 8; ++ k) {
int x = i + dt[k][0];
int y = j + dt[k][1];
if (map[x][y] == -1) {
map[i][j] ++;
}
}
}
}
}
}
void output() {
for (int i = 1; i <= n; ++ i) {
for (int j = 1; j <= m; ++ j) {
putchar(map[i][j]==-1 ? '*' : map[i][j]+'0');
}
putchar('\n');
}
}
int main() {
input();
calc();
output();
return 0;
}
P2670 [NOIP2015 普及组] 扫雷游戏的更多相关文章
- [NOIP2015 普及组] 扫雷游戏
[NOIP2015 普及组] 扫雷游戏 难度:入门 题目描述 扫雷游戏是一款十分经典的单机小游戏.在nn行mm列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格).玩家翻开 ...
- NOIP2015普及组总结
NOIP2015普及组总结 这次考试总体感觉不错,不过觉得时间有点紧,在最后30分钟才打完. 第一题(金币coin):大大的W!爆搜O(N),一分钟打完: 第二题(扫雷游戏mine):同上: 第三题( ...
- [NOIP2015] 普及组
金币 模拟 #include<iostream> #include<cstdio> using namespace std; int main(){ int k,n; scan ...
- NOIP2015 普及组(Junior) 解题报告
1. 金币 (coin.cpp/c/pas) 国王将金币作为工资,发放给忠诚的骑士.第一天,骑士收到一枚金币:之后两天(第二天和第三天),每天收到两枚金币:之后三天(第四.五.六天),每天收到三枚金币 ...
- NOIP2015普及组第四题推销员
好久没有写博客了,今天再写一篇.还是先看题: 试题描述 阿明是一名推销员,他奉命到螺丝街推销他们公司的产品.螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户.螺丝街一共有 N 家 ...
- 洛谷【P2669】NOIP2015普及组 T1金币
我对模拟的理解:http://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.luogu.org/problemnew/show/P266 ...
- NOIP2008普及组传球游戏(动态规划)——yhx
题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同 ...
- [NOIP2015普及组]求和
题目 题目描述 一条狭长的纸带被均匀划分出了n个格子,格子编号从1到n.每个格子上都染了一种颜色color_i用[1,m]当中的一个整数表示),并且写了一个数字numberi. 定义一种特殊的三元组: ...
- NOIP2010普及组 三国游戏
题目OJ地址 http://codevs.cn/problem/1129/ https://www.luogu.org/problemnew/show/P1199 题目描述 Description 小 ...
- NOIP2015 普及组 洛谷P2671 求和 (数学)
一道数学题...... 采用分组的思想,我们要统计答案的数对满足两个条件:同奇偶,同颜色.所以可以按这两个要求分组. 然后就是分组处理了,对于每组(有k个数),这里面的任意两对数都是满足条件的,可推出 ...
随机推荐
- 辣鸡 mac 下 pycharm 中代码拖拽的问题
Editor –> General Enable Drag'n'Drop functionality in Editor
- Advanced Installer添加快捷方式和卸载功能
依次点击左侧"资源 "中的"文件和文件夹"选中"应用程序快捷方式文件夹 ",在右侧空白处右键-新建快捷方式 在弹出的对话框中,选择需要创建快 ...
- 深入剖析Java中的反射,由浅入深,层层剥离!
写在开头 之前更新了不少Java的基础知识,比如Java的类.对象.基础类型.关键字.序列化.泛型.值传递等等,今天要上点深度了,来聊一聊Java中的 反射 ! 所谓反射,就是在运行时分析.检查和操作 ...
- Arduino语言基础(萌新)
Arduino语言基础(萌新) Arduino语言注解Arduino语言是建立在C/C++基础上的,其实也就是基础的C语言,Arduino语言只不过把AVR单片机(微控制器)相关的一些参数设置都函数化 ...
- HarmonyOS 实战小项目开发(一)
HarmonyOS 实战小项目开发(一) 日常逼逼叨 在经过一周多的Harmonyos 开发基础知识的学习后,自己通过对于Harmonyos基础知识的学习之后,结合自己的一些想法,独自完成了利用Ark ...
- 优化利器In-Memory开启和效果
本文主要介绍Oracle In-Memory 选件,Oracle在12.1.0.2就已经推出了In-Memory这个选件,现在通常会建议所有使用19.8及之后版本的用户,有条件都要留给In-memor ...
- DBGRIDEH 鼠标滚动 和 点击单元格解决思路【无意间看到,主从表】
DBGRIDEH 鼠标滚动 和 点击单元格因为我是用2个DBgridEH,主表数据变化(用的是OnCellClick),明细表也变化.现在的情况时,鼠标滚动时,明细表数据不变化好像也没看到相关的事件请 ...
- NC17315 背包
题目链接 题目 题目描述 Applese有 \(1\) 个容量为 \(v\) 的背包,有 \(n\) 个物品,每一个物品有一个价值 \(a_i\) ,以及一个大小 \(b_i\) 然后他对此提出了自己 ...
- Python递归遍历目录并删除文件中的前N行
1 import os 2 3 # 遍历目录下的所有文件 4 def check_file(file_path): 5 os.chdir(file_path) 6 print(os.path.absp ...
- Ubuntu20.04安装记录
在Ubuntu下将iso文件刻录到U盘, 可以使用系统自带的Startup Disk Creator. 分区方式 使用整个硬盘, 一个512G SSD, 使用默认的分区方式, 会创建一个512M的EF ...