纪中21日c组T2 2117. 【2016-12-30普及组模拟】台风
2117. 台风
(File IO): input:storm.in output:storm.out
时间限制: 1000 ms 空间限制: 262144 KB 具体限制
题目描述
天气预报频道每天从卫星上接受卫星云图。图片被看作是一个矩阵,每个位置上要么是”#”,要么”.”,”#”表示该位置没有云,”.”表示有云,地图上每个位置有多达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普及组模拟】台风的更多相关文章
- 纪中21日T3 2118. 【2016-12-30普及组模拟】最大公约数
纪中21日T3 2118. 最大公约数 (File IO): input:gcd.in output:gcd.out 时间限制: 1000 ms 空间限制: 262144 KB 具体限制 Goto ...
- 洛谷P1880 [NOI1995]石子合并 纪中21日c组T4 2119. 【2016-12-30普及组模拟】环状石子归并
洛谷P1880 石子合并 纪中2119. 环状石子归并 洛谷传送门 题目描述1 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石 ...
- 纪中21日c组模拟赛
AWSL AWSL AWSL AWSL AWSL AWSL AWSL AWSL AWSL AWSL AWSL AWSL AWSL AWSL AWSL AWSL 题解传送 T1 ...
- 纪中21日c组T1 1575. 二叉树
1575. 二叉树 (File IO): input:tree.in output:tree.out 时间限制: 1000 ms 空间限制: 262144 KB 具体限制 Goto Probl ...
- 纪中17日T1 2321. 方程
纪中17日T1 2321. 方程 (File IO): input:cti.in output:cti.out 时间限制: 1000 ms 空间限制: 262144 KB 具体限制 Goto ...
- 纪中10日T1 2313. 动态仙人掌
纪中10日 2313. 动态仙人掌 (File IO): input:dinosaur.in output:dinosaur.out 时间限制: 1500 ms 空间限制: 524288 KB 具 ...
- 纪中23日c组T2 2159. 【2017.7.11普及】max 洛谷P1249 最大乘积
纪中2159. max 洛谷P1249 最大乘积 说明:这两题基本完全相同,故放在一起写题解 纪中2159. max (File IO): input:max.in output:max.out 时间 ...
- 纪中23日c组T3 2161. 【2017.7.11普及】围攻 斐波那契数列
2161. 围攻 (File IO): input:siege.in output:siege.out 时间限制: 1000 ms 空间限制: 262144 KB 具体限制 Goto Prob ...
- 纪中10日T1 2300. 【noip普及组第一题】模板题
2300. [noip普及组第一题]模板题 (File IO): input:template.in output:template.out 时间限制: 1000 ms 空间限制: 262144 K ...
随机推荐
- 《快乐编程大本营》java语言训练班 1课:第一个java程序:你好,范冰冰;
1Java介绍 2安装java环境JDK 3安装web环境tomcat 4安装开发工具Idea2017 5编写第一个程序 ‘你好,范冰冰!’ 地址: http://code6g.com 1.Java介 ...
- 死磕java(7)
http://www.cnblogs.com/liunanjava/p/4296045.html 自己写的例子 package com.sougn.trynew; public abstract cl ...
- java架构之路-(netty专题)初步认识BIO、NIO、AIO
本次我们主要来说一下我们的IO阻塞模型,只是不多,但是一定要理解,对于后面理解netty很重要的 IO模型精讲 IO模型就是说用什么样的通道进行数据的发送和接收,Java共支持3种网络编程IO模式: ...
- 【做题笔记】 P1610 鸿山洞的灯
正解:DP 比较好写的/我用的算法:贪心 首先需要理解几个地方: 第二行输入的 \(n\) 个数字是每盏灯所在的地方.可以不按顺序,灯与灯之间的距离是个变量. 对于任意一段区间,只要是在 \(\tex ...
- 目标检测之单步检测(Single Shot detectors)
目标检测之单步检测(Single Shot detectors) 前言 像RCNN,fast RCNN,faster RCNN,这类检测方法都需要先通过一些方法得到候选区域,然后对这些候选区使用高质量 ...
- eclipse使用jdbc方式连接sql server 2012数据库史上最新最详细教程(2015年4月已亲测)
步骤分为3部:1.通过sql server 配置管理器配置1433端口 2.将sqljdbc41.jar类库添加到对应的工程中 3.在java程序中连接数据库 步骤1:打开sql server ...
- 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, ...
- ELK搭建(docker环境)
ELK是Elasticsearch.Logstash.Kibana的简称,这三者是核心套件,但并非全部. Elasticsearch是实时全文搜索和分析引擎,提供搜集.分析.存储数据三大功能:是一套开 ...
- MySQL8.0关系数据库基础教程(三)-select语句详解
1 查询指定字段 在 employee 表找出所有员工的姓名.性别和电子邮箱. SELECT 表示查询,随后列出需要返回的字段,字段间逗号分隔 FROM 表示要从哪个表中进行查询 分号为语句结束符 这 ...
- go net包简记
TCP服务端 go语言中可以每次建立一次链接就创建一个goroutine去处理,使用goroutine实现并发非常方便和高效. TCP服务端程序的一般处理流程1.建立并绑定 Socket:首先服务端使 ...