洛谷P6866 [COCI2019-2020#5] Emacs

题目描述

给定一个 n×m 的只含有 .* 的矩阵。

矩阵中 * 形成一些不重叠的长方形。它们不在边缘或顶点接触。

求长方形有多少个?

输入格式

第一行:两个正整数 n 和 m。

以下 n 行:表示题目描述中的矩阵。矩阵只含有 .*

输出格式

一行一个非负整数,你的答案。

输入输出样例

输入 #1

复制代码
6 7
***....
***..**
.....**
.***.**
.***...
.***...

输出 #1

复制代码
3

输入 #2

复制代码
3 3
*.*
...
*.*

输出 #2

复制代码
4

输入 #3

复制代码
1 10
.*.**.***.

输出 #3

复制代码
3

说明/提示

数据范围

  • 对于 10pts 的数据,矩阵中每个长方形只含一个 *
  • 对于另外 15pts 的数据,保证n=1。
  • 对于所有的数据,1≤n,m≤100。

说明

题目译自 COCI2019-2020 CONTEST #5 T1 Emacs ,译者 90693

要找长方形其实只用看顶点,如果一个点的上面和左边都是".",那么这个点就一定是某个长方形的左上顶点,同时我把输入矩阵的周围都打成".",可以避免边界问题

废话不多说,直接上code:

复制代码
#include <bits/stdc++.h>
using namespace std;
int main() {
	int i,j,n,m,cnt=0;
	char a[105][105];
	cin>>n>>m;
	for(i=0;i<=n+1;i++){
		for(j=0;j<=m+1;j++){
			if(i==0||j==0||i==n+1||j==m+1){//围出边界
				a[i][j]='.';
			}
		}
	}
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			cin>>a[i][j];
		}
	}
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
		    if(a[i-1][j]=='.'&&a[i][j-1]=='.'&&a[i][j]=='*'){//判断,必须上面和左边都是".",并且这个点是"*"
		    	cnt++;//统计
			}
		}
	}
	cout<<cnt;
    return 0;
}

喜欢就点个赞吧!

相关推荐
定偶1 分钟前
进制转换小题
c语言·开发语言·数据结构·算法
体系结构论文研讨会1 小时前
多项式环及Rq的含义
算法
智驱力人工智能1 小时前
极端高温下的智慧出行:危险检测与救援
人工智能·算法·安全·行为识别·智能巡航·高温预警·高温监测
森焱森1 小时前
60 美元玩转 Li-Fi —— 开源 OpenVLC 平台入门(附 BeagleBone Black 驱动简单解析)
c语言·单片机·算法·架构·开源
课堂剪切板2 小时前
ch07 题解
算法·深度优先
R_AirMan2 小时前
深入浅出Redis:一文掌握Redis底层数据结构与实现原理
java·数据结构·数据库·redis
科大饭桶3 小时前
数据结构自学Day5--链表知识总结
数据结构·算法·leetcode·链表·c
小高Baby@3 小时前
map数据结构在Golang中是无序的,并且键值对的查找效率较高的原因
数据结构
北风toto3 小时前
python学习DataFrame数据结构
数据结构·python·学习
我爱C编程5 小时前
基于Qlearning强化学习的1DoF机械臂运动控制系统matlab仿真
算法