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. 精心整理「服务器Linux C/C++」 成长路程(附思维导图)

    前言 我不是名校毕业,更没有大厂的背景,我只是一个毕业不到 2 年的普普通通的程序员,在摸爬滚打的工作这段时间里,深知了有一个「完整的知识体系」是非常重要的.当事人非常后悔没有在大学期间知道这个道理- ...

  2. css的选择器及它的种类特性?

    今天主要说的是选择器的基础, 首先看,选择器的优先级:!important > 行间样式 > id选择器 > class 选择器 == 属性选择器 > 标签选择器 > 通 ...

  3. Eclipse中文语言包安装和设置中文

    对于英语水平不好或者初学者来说使用中文开发环境可以有效提高学习效率,便于快速的学习和上手,不过对于当前的技术环境学习英语还是非常有必要的,当对Eclipse掌握到一定程度还是应该多使用英语环境来开发, ...

  4. 【WPF学习】第三十九章 理解形状

    在WPF用户界面中,绘制2D图形内容的最简单方法是使用形状(shape)——专门用于表示简单的直线.椭圆.矩形以及多变形的一些类.从技术角度看,形状就是所谓的绘图图元(primitive).可组合这些 ...

  5. 机器学习(ML)七之模型选择、欠拟合和过拟合

    训练误差和泛化误差 需要区分训练误差(training error)和泛化误差(generalization error).前者指模型在训练数据集上表现出的误差,后者指模型在任意一个测试数据样本上表现 ...

  6. CCF_201312-4_有趣的数

    dp题,dp[i][j]代表i位数,j状态的数量.其中,j 的状态表示值有6种. 0 1 2     √ j = 0 3 01 02   √ j = 1 03 12 13 23   √ j = 2 0 ...

  7. num11---桥接模式

    比如手机类,有各种类型,比如翻盖.平板等,每一类下又有各个品牌,比如华为,如果新增一个类型,比如折叠屏,或者新增一个手机品牌,苹果,那么会导致 扩展性问题. 这种情况下,应该使用桥接模式. 代码: 创 ...

  8. 【C++】随机数引擎

    rand() 基本:使用随机数时,经常见到的是C标准库提供的函数rand(),这个函数会生成一个0到RAND_MAX之间的一个整形数: 分布:为了得到一个给定范围内的随机数,通常会对生成的随机数取余: ...

  9. Jmeter之存储测试结果

    前言 Jmeter做接口测试时,发送请求后,我们可以通过察看结果树看到结果,但是如果想要把测试结果保存起来,那该怎么做呢? 一:添加一个登录的http请求,填入正确的ip,接口地址,以及参数 二:右键 ...

  10. [软件分享]Office Tool Plus,一个OFFICE 管理、下载、安装器

    转载自我的博客:https://blog.ljyngup.com 教程摘自官方教程. 出事与本人无关 官网:https://otp.landian.vip/zh-cn/ Office Tool Plu ...