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. 《快乐编程大本营》java语言训练班 1课:第一个java程序:你好,范冰冰;

    1Java介绍 2安装java环境JDK 3安装web环境tomcat 4安装开发工具Idea2017 5编写第一个程序 ‘你好,范冰冰!’ 地址: http://code6g.com 1.Java介 ...

  2. 死磕java(7)

    http://www.cnblogs.com/liunanjava/p/4296045.html 自己写的例子 package com.sougn.trynew; public abstract cl ...

  3. java架构之路-(netty专题)初步认识BIO、NIO、AIO

    本次我们主要来说一下我们的IO阻塞模型,只是不多,但是一定要理解,对于后面理解netty很重要的 IO模型精讲  IO模型就是说用什么样的通道进行数据的发送和接收,Java共支持3种网络编程IO模式: ...

  4. 【做题笔记】 P1610 鸿山洞的灯

    正解:DP 比较好写的/我用的算法:贪心 首先需要理解几个地方: 第二行输入的 \(n\) 个数字是每盏灯所在的地方.可以不按顺序,灯与灯之间的距离是个变量. 对于任意一段区间,只要是在 \(\tex ...

  5. 目标检测之单步检测(Single Shot detectors)

    目标检测之单步检测(Single Shot detectors) 前言 像RCNN,fast RCNN,faster RCNN,这类检测方法都需要先通过一些方法得到候选区域,然后对这些候选区使用高质量 ...

  6. eclipse使用jdbc方式连接sql server 2012数据库史上最新最详细教程(2015年4月已亲测)

    步骤分为3部:1.通过sql server 配置管理器配置1433端口   2.将sqljdbc41.jar类库添加到对应的工程中   3.在java程序中连接数据库 步骤1:打开sql server ...

  7. Codeforces 977D Divide by three, multiply by two(拓扑排序)

      Polycarp likes to play with numbers. He takes some integer number xx, writes it down on the board, ...

  8. ELK搭建(docker环境)

    ELK是Elasticsearch.Logstash.Kibana的简称,这三者是核心套件,但并非全部. Elasticsearch是实时全文搜索和分析引擎,提供搜集.分析.存储数据三大功能:是一套开 ...

  9. MySQL8.0关系数据库基础教程(三)-select语句详解

    1 查询指定字段 在 employee 表找出所有员工的姓名.性别和电子邮箱. SELECT 表示查询,随后列出需要返回的字段,字段间逗号分隔 FROM 表示要从哪个表中进行查询 分号为语句结束符 这 ...

  10. go net包简记

    TCP服务端 go语言中可以每次建立一次链接就创建一个goroutine去处理,使用goroutine实现并发非常方便和高效. TCP服务端程序的一般处理流程1.建立并绑定 Socket:首先服务端使 ...