题目描述
给定一个 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;
}喜欢就点个赞吧!