解题思路:遍历两遍即可。如果为连续为点,那么答案++就好了。这里注意k=1的情况,防止重复计算。
#include <iostream>
#include <string>
#include <algorithm>
#include <map>
#include <memory.h>
using namespace std;
char maze[2005][2005];
int main()
{
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
for(int i=0;i<n;i++)
scanf("%s",maze[i]);
if(k==1){
int ans=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(maze[i][j]=='.'){
ans++;
}
}
}
cout<<ans<<endl;
}
else{
int ans=0;
for(int i=0;i<n;i++){
int lian=0;
for(int j=0;j<m;j++){
if(maze[i][j]=='.'){
lian++;
if(lian>=k)
ans++;
}
else
lian=0;
}
}
for(int i=0;i<m;i++){
int lian=0;
for(int j=0;j<n;j++){
if(maze[j][i]=='.'){
lian++;
if(lian>=k)
ans++;
}
else
lian=0;
}
}
cout<<ans<<endl;
}
return 0;
}