一本通题解——1191:流感传染
题目相关
题目链接
一本通 OJ,http://ybt.ssoier.cn:8088/problem_show.php?pid=1191。
题目描述
有一批易感人群住在网格状的宿舍区内,宿舍区为 n*n 的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。请输出第 m 天得流感的人数。
输入
第一行一个数字 n,n 不超过100,表示有 n*n 的宿舍房间。
接下来的 n 行,每行 n 个字符,’.’ 表示第一天该房间住着健康的人,’#’ 表示该房间空着,’@’ 表示第一天该房间住着得流感的人。
接下来的一行是一个整数 m,m 不超过 100。
输出
输出第 m 天,得流感的人数。
样例输入
5
....#
.#.@.
.#@..
#....
.....
4
样例输出
16
题目分析
题意分析
一个疾病很容易感染,它的感染方法是从当前病人房间出发,向上、向右、向下、向左,这四个方向进行感染。只要这个房间里有健康的人,就会给感染。如下图所示。要求我们计算,记过若干天后,得病的人数。
数据范围分析
n 不超过100,也就是说,最多有 100*100=10000个房间,也就意味着所有人的感染最大的数据为 1e4。
样例数据分析
我们用输入样例为例,绘制一下每天病人情况。
1、第一天。病人情况如下所示。
....#
.#.@.
.#@..
#....
.....
这样我们知道初始病人数量为 2。
2、第二天。我们从开始的病人房间出发,分四个方向进行感染。病人情况如下所示。
...@#
.#@@@
.#@@.
#.@..
.....
这样我们知道病人数量为 7。
3、第三天。我们从开始的病人房间出发,分四个方向进行感染。病人情况如下所示。
..@@#
.#@@@
.#@@@
#@@@.
..@..
这样我们知道病人数量为 12。
3、第三天。我们从开始的病人房间出发,分四个方向进行感染。病人情况如下所示。
.@@@#
.#@@@
.#@@@
#@@@@
.@@@.
这样我们知道病人数量为 16。
算法设计
从上面的样例数据分析,我们可以知道,要做的事情就是模拟整个感染过程。那么问题就变成如何描述病人感染。这里我们可以参考使用数据结构中的队列(queue)来模拟。这样我们算法可以描述如下:
1、读入数据,并生成第一天病人队列。
2、遍历病人队列,开始四个方向感染病人。
3、队列结束条件:(1)队列里没有新的病人可以感染;(2)感染的天数达到计算要求。
AC 参考代码
#include <iostream>
#include <queue>using namespace std;
const int MAXN = 100+2;char room[MAXN][MAXN];//房间描述typedef struct _POS {int x; //x坐标int y; //y坐标int day; //第几天干扰
} POS;
queue<POS> q;unsigned long long ans=0;int main() {int n;cin>>n;for (int i=0; i<n; i++) {for (int j=0; j<n; j++) {cin>>room[i][j];if ('@'==room[i][j]) {POS t;t.x = i;t.y = j;t.day = 1;q.push(t);ans++;}}}int m;cin>>m;//定义感染方向const int movex[] = { 0, 1, 0, -1};const int movey[] = {-1, 0, 1, 0};//开始递推while (false==q.empty()) {POS curr = q.front();q.pop();//天数到了if (curr.day>=m) {break;}//感染病人for (int i=0; i<4; i++) {int nx = curr.x+movex[i];int ny = curr.y+movey[i];//判断这个房间的人能否给感染if (nx>=0&&nx<n && ny>=0&&ny<n && '.'==room[nx][ny]) {room[nx][ny] = '@';ans++;POS t;t.x = nx;t.y = ny;t.day = curr.day+1;q.push(t);}}}cout << ans << endl;return 0;
}
代码分析
1、如何描述房间。我们使用一个二维字符型数组来描述,参考代码中变量 room 的定义。
2、如何感染病人。参考代码中对变量 movex 和 movey 的定义。
3、遍历过程。退出条件(1),即队列内没有病人,参考 q.empty();退出条件(2),天数达到递推要求,参考 curr.day>=m 这个判断,注意我们是从下标 0 开始使用。
4、如何表示病人是第几天感染的。参考自定义结构体 POS 中的 day 这个变量。
一本通题解——1191:流感传染相关推荐
- 一本通:1191流感传染
一本通:流感传染 [题目描述] 有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着.在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻 ...
- 【信息奥赛题解】流感传染(详细题解 C++代码)
- 信息学奥赛一本通 1191:流感传染 | OpenJudge NOI 2.3 6262:流感传染
[题目链接] ybt 1191:流感传染 OpenJudge NOI 2.3 6262:流感传染 [题目考点] 1. 二维数组 2. 队列 [解题思路] 用一个字符型二维数组存储各个房间的情况. 1. ...
- 信息学奥赛一本通|1191:流感传染
1191:流感传染 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 20081 通过数: 10845 [题目描述] 有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格 ...
- 【信奥赛一本通】1191:流感传染(详细代码)
[c++解决]1191:流感传染(详细代码)有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着.在第一天,有些房间里的人得了流感,以后每天,得流感 ...
- 信息学奥赛一本通 题解目录
刷题 很全的知识体系 转载:https://blog.csdn.net/u011815404/article/details/79324003 第一部分 C++语言 第一章 C++语言入门 T1001 ...
- 信息学奥赛一本通(题解目录)
信息学奥赛一本通(题解目录) 记录了我从初学者到逐渐熟悉c++的成长之路 信息学奥赛一本通OJ 目录 信息学奥赛一本通(题解目录) 前言 一.语言及算法基础篇 基础(一) C++语言 第一章 C++语 ...
- 流感传染 C++ 递推
题目:流感传染 题目描述 有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着.在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染 ...
- 信息学奥赛一本通:1191:流感传染
[题目描述] 有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着.在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已 ...
最新文章
- 前端页面紫红色_谷歌正在开发一种神秘的新型移动操作系统,称为紫红色
- 如何才能做好绩效管理?
- Tsung压力测试介绍
- KinectFusion——微软基于KINECT的实时三维重建项目(KINECT)
- SAP系统搜索分页的前后台实现
- mac 爱普生打印机驱动_高效打印企业首选 爱普生M2178黑白多功能一体机评测
- 加量不加价!极速人脸检测库libfacedetection升级v3版,新增五点检测
- dmb显示服务器断开连接,dmb联网信息发布系统操作手册企业加强版.docx
- 如何使用apiPOST进行模拟发送get、post、delete、put请求(支持文件上传)
- 手机ram内存测试软件,RAMTester(内存检测工具)
- JZOJ3987. Tree
- mysql 查找差值最小_mysql获取两个表中日期字段的最小差值
- 如何使用SX1278的中断控制发送和接收
- burg算法matlab求功率谱,基于AR模型的Burg算法功率谱估计.doc
- WordCAT 一款功能强大、免费共享的Word文档计算机辅助翻译软件
- ggplot2设置坐标轴范围_使用 ggplot2 进行高级绘图—R读书笔记(二)
- Amy Schumer名列2016年迈克菲最危险名人榜榜首
- hdu 4541 Ten Googol
- hive函数用法以及场景
- 论文之Unrolled Optimization with Deep Priors 深先验展开优化
热门文章
- networkx加载gml图数据集文件报错:etworkx.exception.NetworkXError: node #0 has no ‘label‘ attribute
- html---txt文本编辑方式讲解
- Python Web 深度学习实用指南:第三部分
- 【opencv】无缝融合两张图片--cv2.seamlessClone()泊松融合
- 自动更新QQ昵称为当前时间
- JavaWeb中关于table标签
- inventor导出tekla_保存和导出文件参考 | Inventor 2019 | Autodesk Knowledge Network
- SigComm‘21 - A Variegated Look at 5G in the Wild: Performance, Power, and QoE Implications
- B站韩顺平java学习笔记(二十五)-- 正则表达式章节
- 并发队列-Queue