纪中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 ...
随机推荐
- *args 和 **kwargs 的区别
截取百度里的两个答案: 这是Python函数可变参数 args及kwargs *args表示任何多个无名参数,它是一个tuple **kwargs表示关键字参数,它是一个dict 测试代码如下: de ...
- 机器学习(ML)九之GRU、LSTM、深度神经网络、双向循环神经网络
门控循环单元(GRU) 循环神经网络中的梯度计算方法.当时间步数较大或者时间步较小时,循环神经网络的梯度较容易出现衰减或爆炸.虽然裁剪梯度可以应对梯度爆炸,但无法解决梯度衰减的问题.通常由于这个原因, ...
- Educational Codeforces Round 76 (Rated for Div. 2) E. The Contest
Educational Codeforces Round 76 (Rated for Div. 2) E. The Contest(dp+线段树) 题目链接 题意: 给定3个人互不相同的多个数字,可以 ...
- 初入机器学习,安装tensorflow包等问题总结
学习python,机器学习(maching-lerning).深度学习(deep-learning)等概念也是耳熟能详.我最近从新手开始学习maching-learning知识,不过课程偏向基本的理论 ...
- Go语言实现:【剑指offer】把字符串转换成整数
该题目来源于牛客网<剑指offer>专题. 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入描述: 输入一个字符串,包括数字字母符号,可以为空. 输出描述: 如果是合 ...
- 小白学 Python 数据分析(5):Pandas (四)基础操作(1)查看数据
在家为国家做贡献太无聊,不如跟我一起学点 Python 人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Panda ...
- JVM性能优化系列-(4) 编写高效Java程序
4. 编写高效Java程序 4.1 面向对象 构造器参数太多怎么办? 正常情况下,如果构造器参数过多,可能会考虑重写多个不同参数的构造函数,如下面的例子所示: public class FoodNor ...
- 【Debian】 Debian 安装源配置
Debian 安装源配置 所有的Linux安装完后第一件事,就是要更新安装源 安装源是什么呢,安装源又称软件源,是指把软件的安装源地址放在一个pool里面,用一条命令(比如apt-get instal ...
- hive on spark 编译时遇到的问题
1.官方网站下载spark 1.5.0的源码 2.根据官方编译即可. export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedC ...
- k8s系列---kubectl基础
kubectl get pods 查看所有pods kubectl get services 查看services kubectl replace --filename=myweb-rc.ya ...