题目描述
给定一个 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;
}
喜欢就点个赞吧!
标签:...,洛谷,输出,P6866,矩阵,长方形,2020,顶点,输入 From: https://blog.csdn.net/m0_72614289/article/details/136692018