G - Gluttonous Goop

题意

有一种真菌,每过一个单位时间可向相邻八格的空格子扩散,现给出r * c的培养皿及真菌初始分布,求k单位时间后真菌占据的总格数。
(1≤ r,c ≤20 , 0 ≤ k ≤106,真菌可跨过培养皿扩散)

思路

由于r 、 c均不超过20,可将培养皿上下左右均扩大20格至60 * 60。
若k <= 20,直接模拟即可。
若k > 20,先模拟前20步保证所有菌落连通。
菌落连通后,用填补法
找到当前能围住所有菌落的最小矩形,记录该矩形中空格数,则以后菌落每扩张一次,该矩形长宽扩大2但空格数不变。

代码

#include <iostream>using namespace std;bool flag[60][60];
int init[405][2];
int main()
{int r, c, i, j, l, emp, maxx, minx, maxy, miny, cnt = 0, p;long long ans = 0, k, k2;char ch;cin >> r >> c >> k;for (i = 0; i < r; i++)for (j = 0; j < c; j++){cin >> ch;if (ch == '#'){flag[20 + i][20 + j] = 1;init[cnt][0] = 20 + i;init[cnt][1] = 20 + j;cnt++;}}ans += cnt;k2 = (k < 20 ? k : 20);for (p = 0; p < cnt; p++)for (i = -k2; i <= k2; i++)for (j = -k2; j <= k2; j++)if (!flag[init[p][0] + i][init[p][1] + j]){flag[init[p][0] + i][init[p][1] + j] = 1;ans++;}if (k > 20 && ans > 0){maxx = maxy = -1;minx = miny = 60;for (i = 0; i < 60; i++)for (j = 0; j < 60; j++)if (flag[i][j]){maxx = max(i, maxx);maxy = max(j, maxy);minx = min(i, minx);miny = min(j, miny);}emp = (maxx - minx + 1) * (maxy - miny + 1) - ans;ans = ((k - 20) * 2 + (maxx - minx + 1)) * ((k - 20) * 2 + (maxy - miny + 1)) - emp;}cout << ans;return 0;
}
}

G - Gluttonous Goop相关推荐

  1. BAPC 2019 G. Gluttonous Goop 线段树扫描线

    题目链接:https://nanti.jisuanke.com/t/44323 题意:有若干个小方块,每秒会往八个方向扩展,问k秒后有多少个区域被覆盖 思路:k秒后每个格子都扩展成了一个矩形,所以也就 ...

  2. Benelux Algorithm Programming Contest 2019 G. Gluttonous Goop 思维规律题

    我们模拟后发现: 当病菌都连在一起时: 形成一个多边形,我们把他填补可以得到一个最小矩形. 把这个多边形它感染一次后:又得到一个多边形,把新的多边形填补得到新的矩形,发现:两个矩形内的未被感染的数量都 ...

  3. labview利用簇模拟汽车控制_在LabVIEW应用程序中何时应采用面向对象技术 (翻译)...

    在LabVIEW应用程序中何时应采用面向对象技术 (翻译) 在LabVIEW中应用面向对象编程技术并不是一件特别容易的事情,尤其是先期的学习成本很高,但是在开发大型.复杂的.长期维护的程序时,使用面向 ...

  4. 通用 zkSNARK

    文章目录 算术电路的约束 单个乘法操作 多个乘法操作 其他操作 Constant Coefficients Addition for Free Addition Subtraction and Div ...

  5. 文件上传之伪Ajax方式上传

    From: <由 Windows Internet Explorer 8 保存> Subject: =?gb2312?B?zsS8/snPtKvWrs6xQWpheLe9yr3Jz7SrI ...

  6. 过滤Linux下不同大小的文件,linux查找当前目录下 M/G 大小的文件,删除Linux下指定大小的文件

    过滤Linux下不同大小的文件,linux查找当前目录下 M/G 大小的文件,删除Linux下指定大小的文件 find ./ -type f -size +1G| xargs rm 在清理系统日志文件 ...

  7. gcc 自动识别的文件扩展名,gcc/g++ -x 选项指定语言,不同 gcc 版本 -std 编译选项支持列表

    对于执行 C 或者 C++ 程序,需要借助 gcc(g++)指令来调用 GCC 编译器. 对于以 .c 为扩展名的文件,GCC 会自动将其视为 C 源代码文件 对于以 .cpp 为扩展名的文件,GCC ...

  8. gcc 和 g++ 的联系和区别,使用 gcc 编译 c++

    GCC 编译器已经为我们提供了调用它的接口,对于 C 语言或者 C++ 程序,可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器. 实际使用中我们更习惯使用 gcc 指令编译 C 语言程序 ...

  9. C++ 笔记(01)— 环境设置(安装g++、g++ 编译 C++、 生成可执行文件流程、解释器与编译器区别)

    1. g++安装 在 Linux 或者 UNIX 系统上,可以通过下面命令来查看是否安装了 GCC . $ g++ -v 如果已经安装 GNU 编译器,则有以下输出: wohu@wohu:~/C++$ ...

最新文章

  1. Kafka配置SSL(云环境)
  2. python背景怎么自定义铃声_python爬取手机铃声
  3. 为什么说python是世界上最好的语言-python是世界上最好的语言
  4. ActiveReports中如何在后台导出运行时绑定数据源报表
  5. python hacklib_【入门】angr:基于python的二进制分析框架
  6. ASP文件上传方式大比拼
  7. [Flutter] 一些面试可能会问基础知识
  8. Python繁体中文和简体中文互转
  9. C++的商品管理系统
  10. 公差带与配合 常用基孔(轴)制基准公差数值
  11. 卷积码原理及基本概念
  12. 去掉office标题前的黑点
  13. 一首记忆深刻的诗:《昭君出塞》
  14. 【朋友刀刀画展一游】谢谢刀刀!
  15. x的x分之一次方极限x趋于0_e的x分之一的左右极限
  16. 智慧工地管理平台可视化解决方案
  17. beeline连接hive的两种方式
  18. 制作二维码名片-手机扫描可直接保存到手机通讯录
  19. java正则校验-密码至少要由包括大小写字母、数字、标点符号的其中两项,共计8-16位编码组成
  20. 无线路由WDS无线中继功能详解[转]

热门文章

  1. Ubuntu通过tftp与嵌入式设备(开发板)进行文件互传
  2. 阿里云服务器+MobaXtern+Anaconda
  3. String简单介绍
  4. python全栈生鲜电商_GitHub - ZHAISHENKING/super: 生鲜电商后台接口
  5. 【测试】软件测试的划分
  6. WRF替换静态地理数据中的土地利用数据(WRF替换下垫面数据)
  7. Java7日期时间API
  8. 互联网酒店预订系统的服务端架构图-4
  9. 用 Delphi 学设计模式(一) 之 简单工厂篇 (原创)
  10. .cc注册规则有哪些 CC域名前景怎么样