题目相关

题目链接

一本通 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:流感传染相关推荐

  1. 一本通:1191流感传染

    一本通:流感传染 [题目描述] 有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着.在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻 ...

  2. 【信息奥赛题解】流感传染(详细题解 C++代码)

  3. 信息学奥赛一本通 1191:流感传染 | OpenJudge NOI 2.3 6262:流感传染

    [题目链接] ybt 1191:流感传染 OpenJudge NOI 2.3 6262:流感传染 [题目考点] 1. 二维数组 2. 队列 [解题思路] 用一个字符型二维数组存储各个房间的情况. 1. ...

  4. 信息学奥赛一本通|1191:流感传染

    1191:流感传染 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 20081 通过数: 10845 [题目描述] 有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格 ...

  5. 【信奥赛一本通】1191:流感传染(详细代码)

    [c++解决]1191:流感传染(详细代码)有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着.在第一天,有些房间里的人得了流感,以后每天,得流感 ...

  6. 信息学奥赛一本通 题解目录

    刷题 很全的知识体系 转载:https://blog.csdn.net/u011815404/article/details/79324003 第一部分 C++语言 第一章 C++语言入门 T1001 ...

  7. 信息学奥赛一本通(题解目录)

    信息学奥赛一本通(题解目录) 记录了我从初学者到逐渐熟悉c++的成长之路 信息学奥赛一本通OJ 目录 信息学奥赛一本通(题解目录) 前言 一.语言及算法基础篇 基础(一) C++语言 第一章 C++语 ...

  8. 流感传染 C++ 递推

    题目:流感传染 题目描述 有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着.在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染 ...

  9. 信息学奥赛一本通:1191:流感传染

    [题目描述] 有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着.在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已 ...

最新文章

  1. 前端页面紫红色_谷歌正在开发一种神秘的新型移动操作系统,称为紫红色
  2. 如何才能做好绩效管理?
  3. Tsung压力测试介绍
  4. KinectFusion——微软基于KINECT的实时三维重建项目(KINECT)
  5. SAP系统搜索分页的前后台实现
  6. mac 爱普生打印机驱动_高效打印企业首选 爱普生M2178黑白多功能一体机评测
  7. 加量不加价!极速人脸检测库libfacedetection升级v3版,新增五点检测
  8. dmb显示服务器断开连接,dmb联网信息发布系统操作手册企业加强版.docx
  9. 如何使用apiPOST进行模拟发送get、post、delete、put请求(支持文件上传)
  10. 手机ram内存测试软件,RAMTester(内存检测工具)
  11. JZOJ3987. Tree
  12. mysql 查找差值最小_mysql获取两个表中日期字段的最小差值
  13. 如何使用SX1278的中断控制发送和接收
  14. burg算法matlab求功率谱,基于AR模型的Burg算法功率谱估计.doc
  15. WordCAT 一款功能强大、免费共享的Word文档计算机辅助翻译软件
  16. ggplot2设置坐标轴范围_使用 ggplot2 进行高级绘图—R读书笔记(二)
  17. Amy Schumer名列2016年迈克菲最危险名人榜榜首
  18. hdu 4541 Ten Googol
  19. hive函数用法以及场景
  20. 论文之Unrolled Optimization with Deep Priors 深先验展开优化

热门文章

  1. networkx加载gml图数据集文件报错:etworkx.exception.NetworkXError: node #0 has no ‘label‘ attribute
  2. html---txt文本编辑方式讲解
  3. Python Web 深度学习实用指南:第三部分
  4. 【opencv】无缝融合两张图片--cv2.seamlessClone()泊松融合
  5. 自动更新QQ昵称为当前时间
  6. JavaWeb中关于table标签
  7. inventor导出tekla_保存和导出文件参考 | Inventor 2019 | Autodesk Knowledge Network
  8. SigComm‘21 - A Variegated Look at 5G in the Wild: Performance, Power, and QoE Implications
  9. B站韩顺平java学习笔记(二十五)-- 正则表达式章节
  10. 并发队列-Queue