2117. 台风

(File IO): input:storm.in output:storm.out

时间限制: 1000 ms  空间限制: 262144 KB  具体限制

Goto ProblemSet

题目描述

天气预报频道每天从卫星上接受卫星云图。图片被看作是一个矩阵,每个位置上要么是”#”,要么”.”,”#”表示该位置没有云,”.”表示有云,地图上每个位置有多达8个相邻位置,分别是,左上、上、右上、左、右、左下、下、右下8个方向,一块云是由连续的”.”组成。

给你一幅卫星云图和形成台风所需云的大小,要你计算出有几个台风以及最大台风的大小。我们用云的大小表示台风的大小。

输入

第一行输入两个整数M和N,表示行和列数。接下来M行,每行N个字符”#”或”.”描述地图的情况。第M+2行是一个正整数K,表示要形成台风,云的大小至少为K.

输出

两个用空各隔开的整数N和S,分别表示台风的个数,和最大台风的大小。

样例输入

6 11
#####.#####
####.####.#
###..##.#.#
##...######
######.....
###########
4

样例输出

2 7

数据范围限制

原题此处未给出,我提交后估计$0 \leq n,m \leq 5000$左右

Solution

这是今天最简单的一道题,许多同学都拿了分

但是我也提交了

我却是0分……

哈哈……不重要了

第一行输入两个整数M和N,表示行和列数。接下来M行,每行N个字符”#”或”.”描述地图的情况。

在读入的地方,我发现我写反了,于是改正了

但是在枚举dfs起点时,我没有检查到!

这就导致dfs的起点会在矩阵外,并且有一些点还不会被扫到……

样例没有过,但是自己出的样例到是过了!

埋怨自己吧……

Algorithm

bool dt(map)数组存点,bool vis数组存是否已访问

从上到下,从左到右,枚举每一个未访问且值为1(.)的点进行dfs

dfs里在这个点的八个方向再搜点,再进行dfs

使用返回值来递归答案

使用一个int数组存可能形成台风的云的面积

最后for扫一遍判断是否比k大,并打擂台求最大值即可……

Code

 #pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<queue>
#include<vector>
#define IL inline
using namespace std;
IL int read()
{
int res=;
char ch=getchar();
while(ch<''||ch>'')
ch=getchar();
while(ch>=''&&ch<='')
res=(res<<)+(res<<)+(ch^),ch=getchar();
return res;
}
int m,n,ans,s,k,num;
bool dt[][];
bool vis[][];
int storm[];
int mov[][]={
,,
,,
,-, ,,
,-, -,-,
-,,
-,,
};
IL int dfs(int x,int y)
{
if(x<||x>m||y<||y>n) return ;
if(vis[x][y]) return ;
if(!dt[x][y]) return ;
vis[x][y]=;
int _new=;
for(int to=;to<;to++)
{
_new+=dfs(x+mov[to][],y+mov[to][]);
}
return _new+;
} int main()
{
// freopen("storm.in","r",stdin);
// freopen("storm.out","w",stdout);
m=read();n=read();
char ch;
for(int i=;i<=m;i++)
for(int j=;j<=n;j++)
{
ch=getchar();
if(ch!='.'&&ch!='#'){
j--;continue;
}
dt[i][j]=(int)(ch=='.');
}
k=read();
for(int i=;i<=m;i++)
for(int j=;j<=n;j++)
if((!vis[i][j])&&dt[i][j]) {
storm[num++]=dfs(i,j);
}
while(num--)
if(storm[num]>=k) ans++,s=max(s,storm[num]);
cout<<ans<<" "<<s;
return ;
}

Impression

AWSL

End

纪中21日c组T2 2117. 【2016-12-30普及组模拟】台风的更多相关文章

  1. 纪中21日T3 2118. 【2016-12-30普及组模拟】最大公约数

    纪中21日T3 2118. 最大公约数 (File IO): input:gcd.in output:gcd.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 Goto ...

  2. 洛谷P1880 [NOI1995]石子合并 纪中21日c组T4 2119. 【2016-12-30普及组模拟】环状石子归并

    洛谷P1880 石子合并 纪中2119. 环状石子归并 洛谷传送门 题目描述1 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石 ...

  3. 纪中21日c组模拟赛

    AWSL  AWSL  AWSL  AWSL AWSL  AWSL  AWSL  AWSL AWSL  AWSL  AWSL  AWSL AWSL  AWSL  AWSL  AWSL 题解传送 T1  ...

  4. 纪中21日c组T1 1575. 二叉树

    1575. 二叉树 (File IO): input:tree.in output:tree.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制   Goto Probl ...

  5. 纪中17日T1 2321. 方程

    纪中17日T1 2321. 方程 (File IO): input:cti.in output:cti.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制   Goto ...

  6. 纪中10日T1 2313. 动态仙人掌

    纪中10日 2313. 动态仙人掌 (File IO): input:dinosaur.in output:dinosaur.out 时间限制: 1500 ms  空间限制: 524288 KB  具 ...

  7. 纪中23日c组T2 2159. 【2017.7.11普及】max 洛谷P1249 最大乘积

    纪中2159. max 洛谷P1249 最大乘积 说明:这两题基本完全相同,故放在一起写题解 纪中2159. max (File IO): input:max.in output:max.out 时间 ...

  8. 纪中23日c组T3 2161. 【2017.7.11普及】围攻 斐波那契数列

    2161. 围攻 (File IO): input:siege.in output:siege.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制   Goto Prob ...

  9. 纪中10日T1 2300. 【noip普及组第一题】模板题

    2300. [noip普及组第一题]模板题 (File IO): input:template.in output:template.out 时间限制: 1000 ms  空间限制: 262144 K ...

随机推荐

  1. 今天你上班了吗?来聊聊一个隐蔽了 5 年的BUG!

    前言 今天,我们要揭晓一个 FineUI 隐藏最深的一个BUG,这个问题从 2014-07-30 发布 FineUIPro v1.0.0 就一直存在,直到最新于 2020-01-10 发布的 v6.1 ...

  2. Spring Boot 2.x基础教程:使用国产数据库连接池Druid

    上一节,我们介绍了Spring Boot在JDBC模块中自动化配置使用的默认数据源HikariCP.接下来这一节,我们将介绍另外一个被广泛应用的开源数据源:Druid. Druid是由阿里巴巴数据库事 ...

  3. 5.场景3:高可用性使用分布式虚拟路由(DVR)

    这个场景描述了使用ML2插件和Open vSwitch的OpenStack网络服务的高可用性分布式虚拟路由(DVR)实现.示例配置创建了一个Flat外部网络和一个VXLAN项目(租户)网络.然而,这种 ...

  4. AI: 绘制图标的实例

    AI绘制矢量电影图标 http://www.fevte.com/tutorial-2299-1.html AI绘制水晶质感QUICKTIME图标 http://wenku.baidu.com/view ...

  5. XDOJ

    1000.a+b. #include<bits/stdc++.h> using namespace std; int a,b; int main() { ios::sync_with_st ...

  6. 如何在windows10家庭版上搭建docker

    如何在windows10家庭版上搭建docker 建议先跳到最后一条,看完之后再决定是否安装. 0X00搭建原因 首先搭docker的想法是我在复现漏洞时候,发现大佬们的复现环境都是基于docker的 ...

  7. python中的PYC文件是什么?

    1. Python是一门解释型语言吗? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言 ...

  8. Centos7更改屏幕显示率

    第一种,在虚拟机中安装VMwareTools,之后在虚拟机菜单栏"查看"这一项选择立即适应窗口. 第二种,修改/boot/grub2/grub.cfg配置文件,在终端输入su,输入 ...

  9. 轻松理解JS中的面向对象,顺便搞懂prototype和__proto__

    这篇文章主要讲一下JS中面向对象以及 __proto__,ptototype和construcator,这几个概念都是相关的,所以一起讲了. 在讲这个之前我们先来说说类,了解面向对象的朋友应该都知道, ...

  10. ORB-SLAM2 论文&代码学习 —— LocalMapping 线程

    转载请注明出处,谢谢 原创作者:Mingrui 原创链接:https://www.cnblogs.com/MingruiYu/p/12360913.html 本文要点: ORB-SLAM2 Local ...