题目描述

Jimmy 和 Symbol 约好一起看星星,浩瀚的星空可视为一个长为 N、宽为 M 的矩阵,矩阵中共有 N×M 个位置,一个位置可以用坐标 (i,j)(1≤i≤N,1≤j≤M)来表示。每个位置上可能是空的,也可能有一个星星。

对于一个位置 (i,j),与其相邻的位置有左边、左上、上面、右上、右边、右下、下面、左下 8 个位置。相邻位置上的星星被视为同一个星座,这种关系有传递性,例如若 (1,1),(1,2),(1,3) 三个 位置上都有星星,那么这三个星星视为同一个星座。包含的星星数量相同的星座被视为一个星系(一个星系中的星座不一定相邻),星系的大小为星系中包含的所有星星数量。

由于 Symbol 太喜欢星系了,他就想考一考 Jimmy,让 Jimmy 求出星空中有多少个星系,他还想知道,最大的星系有多大。

输入格式

第一行两个整数 N,M 表示矩阵的长宽。

接下来 N 行每行 M 个字符,每个字符只可能是.*。这 N 行中第 i 行的第j个字符是*表示位置 (i,j) 上有一个星星,否则表示它是空的。

输出格式

仅一行两个整数,用空格分隔开,分别表示星系的数量与最大星系的大小。

输入样例1

5 7
*......
..**..*
.*...*.
...*...
....*..

输出样例1

3 4

输入样例2

10 10
**..**.**.
***....*..
*...**.**.
...*..*...
..........
**...**.*.
..*.*....*
..........
***..*.*..
.***..*...

输出样例2

4 12

数据规模与约定

对于 20% 的数据,N,M≤20,最大星系大小不超过 200。

对于 50% 的数据,N,M≤400。

对于 70% 的数据,N,M≤1100。

对于 100% 的数据,2≤N,M≤1500,最大星系大小不超过 100000。

思路分析:

1.区分好星星、星座、星系三层关系

2.直接用深度搜索即可

AC的C++代码如下:

#include<bits/stdc++.h>
using namespace std;
#define ll long longll n, m;
char c[2010][2010];
bool a[2010][2010];
ll sum[1000010], k, mx,ans, mxx, t;
ll dx[8] = { 0,1,0,-1,1,1,-1,-1 };
ll dy[8] = { 1,0,-1,0,1,-1,1,-1 };void dfs(ll u, ll v)
{t++;a[u][v] = 1;for (int i = 0; i <= 7; i++){ll x = u + dx[i], y = v + dy[i];if (x <= 0 || x > n || y <= 0 || y > m)continue;if (c[x][y] == '*' && !a[x][y])dfs(x, y);}
}
int main() {cin>>n>>m;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin >> c[i][j];for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if (c[i][j] == '*' && !a[i][j]){t = 0;dfs(i, j); sum[t]++;mx = max(mx, t);k++;}for(int i = 1; i <= mx;i++)if (sum[i]){ans++;mxx = max(mxx, sum[i] * i);}cout<<ans<<" "<<mxx;return 0;
}

观星(【CCF】NOI Online能力测试3 入门组)相关推荐

  1. 建设城市(city)(【CCF】NOI Online 能力测试2 入门组第三题 )

    时间限制: 1.0 秒 空间限制: 256 MB 题目描述 球球是一位建筑师.一天,他收到市长的任务:建设城市.球球打算建造 2n 座高楼.为了保证城市美观,球球做出了如下计划: 球球喜欢整齐的事物. ...

  2. 未了(endless)(【CCF】NOI Online 能力测试2 入门组第一题 )

    时间限制: 1.0 秒 空间限制: 256 MB 题目描述 由于触犯天神,Sisyphus 将要接受惩罚. 宙斯命 Sisyphus 推一块巨石上长度为 L的山坡.Sisyphus 匀速向上推的速度为 ...

  3. 最急救助(【CCF】NOI Online能力测试3 入门组)

    题目描述 救助中心每天都要收到很多求救信号.收到求救信号后,救助中心会分析求救信号,找出最紧急的求救者给予救助. 求救信号是一个由小写英文字母组成的字符串,字符串中连续三个字符依次组成sos的情况越多 ...

  4. 买表(【CCF】NOI Online能力测试3 入门组)

    题目描述 Jimmy 到 Symbol 的手表店买手表,Jimmy 只带了 nn 种钱币,第 ii 种钱币的面额为 ki​ 元,张数为 ai​ 张.Symbol 的店里一共有 m 块手表,第 i 块手 ...

  5. 游戏match(【CCF】NOI Online能力测试2 提高组第三题 )

    题目背景 1s 512M 题目描述 小 A 和小 B 正在玩一个游戏:有一棵包含 n=2m个点的有根树(点从1∼n 编号),它的根是 1 号点,初始时两人各拥有 m 个点.游戏的每个回合两人都需要选出 ...

  6. 子序列问题sequence(【CCF】NOI Online能力测试2 提高组第二题 )

    本题代码稍后加入 题目背景 2s 512M 题目描述 给定一个长度为 n的正整数序列 A1, A2, ⋯, An .定义一个函数 f(l,r) 表示:序列中下标在 [l,r]范围内的子区间中,不同的整 ...

  7. 涂色游戏color(【CCF】NOI Online 能力测试2 提高组第一题 )

    子序列问题sequence([CCF]NOI Online能力测试2 提高组第二题 ) 游戏match([CCF]NOI Online能力测试2 提高组第三题 ) 题目背景 1s 256M 题目描述 ...

  8. 优秀子序列(【CCF】NOI Online能力测试3 提高组)

    题目描述 现在请你求出 A 的所有优秀子序列的价值之和,答案对 10^9+7 取模. 输入格式 第一行一个正整数 n 表示序列长度. 第二行 n 个用空格分隔的非负整数,表示 a1​,a2​,⋯,an ...

  9. 魔法值(【CCF】NOI Online能力测试3 提高组)

    题目描述 H 国的交通由 n 座城市与 m 条道路构成,城市与道路都从 1 开始编号,其中 1 号城市是 H 国的首都.H 国中一条道路将把两个不同城市直接相连,且任意两个城市间至多有一条道路. H ...

最新文章

  1. Nature子刊超越诺贝尔经典理论:神经科学研究路漫漫...
  2. HASH 大量插入与查询
  3. LeetCode 12 整数转罗马数字
  4. Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数)...
  5. 为什么搜索与推荐场景用AUC评价模型好坏?
  6. 模拟退火算法求解TSP问题
  7. dhtmlXTree 指南与实例(二)
  8. mysql使用二进制日志恢复数据
  9. ArrayList(Map(k v))相关操作和遍历
  10. postgres报错:FATAL: Peer authentication failed for user “zabbix“ Previous connection kept
  11. 正式开通我的开源博客
  12. python程序设计实践教程答案江苏_《Python程序设计》习题与答案python教材答案
  13. 百家号怎么加网站链接进行引流,方法让你轻松掌握
  14. [BZOJ1488][HNOI2009]图的同构(dfs+置换群+数论+组合数学)
  15. 我要开始记单词啦(定时记录背单词历程)
  16. VMware View 5.0-10–远程图形工作站配置篇
  17. css——样式化区块——背景
  18. 2021-03-22 什么是SFP端口
  19. ActiviteMQ 对于Consumers pending的限制问题
  20. net_framework 种子

热门文章

  1. zookeeper使用分布式锁
  2. 中文代码示例之Vuejs入门教程(一)
  3. 【加密解密】密码学学习
  4. 【UVALive】3695 Distant Galaxy(......)
  5. java基础 6 基本类型与运算
  6. 常用JS积累之获取节点高度(基于浏览器)
  7. 获取元素在文档上的正确坐标
  8. SHELL编程传递参数方法详解$# $* $0 $1 $2 $...
  9. Linux操作Oracle(17)——linux oracle启动时 :各种报错 解决方案(2020.07.30更新...)
  10. BP反向传播一文弄懂神经网络中的反向传播法