思路:
1.先找到空地,然后往右和下两个方向分别找一找有没有k个位置
2.1的情况比较特殊,因此需要单独处理
#include <cstdio>
#include <iostream>
using namespace std;
int r,c,k,ans;
char s[111][111];
void check(int a,int b)
{
int cnt=1;
for(int i=b+1;i<=c;i++)
{
if(s[a][i]=='.')
{
cnt++;
if(cnt==k)
{
ans++;//cout<<"heng"<<a<<" "<<b<<endl;
}
}
else break;
}
cnt=1;
for(int i=a+1;i<=r;i++)
{
if(s[i][b]=='.')
{
cnt++;
if(cnt==k)
{
ans++;//cout<<"shu"<<a<<" "<<b<<endl;
return;
}
}
else break;
}
}
int main()
{
cin>>r>>c>>k;
for(int i=1;i<=r;i++)
{
for(int j=1;j<=c;j++)
{
cin>>s[i][j];
}
}
for(int i=1;i<=r;i++)
{
for(int j=1;j<=c;j++)
{
if(s[i][j]=='.')
{
if(k!=1) check(i,j);
else ans++;
}
}
}
cout<<ans<<endl;
return 0;
}