数据范围很小,暴力枚举出奇迹,复杂度O(r*c)
第一次开的是string的一维数组,结果re了,换了字符数组解决,结果出了俩wa。
发现是没有特判k==1的情况,遂修改ac。
#include<bits/stdc++.h>
using namespace std;
#define N 105
typedef long long LL;
//string s[N];//这么开re
char s[N][N];
int main()
{
int r,c,k;
int i,j;
LL ans=0;//虽然这道题答案没这么多,还是习惯性的开大了
cin>>r>>c>>k;
for(i=0;i<r;i++)
for(j=0;j<c;j++)
cin>>s[i][j];
//暴力枚举
for(i=0;i<r;i++)
for(j=0;j<c;j++)
{
if(s[i][j]=='.')//从.开始算起分别向右向下枚举两次
{
if(k==1)//对k为1的特判
{
ans++;
continue;
}
if(s[i][j+1]=='.')//向右枚举
{
int flag=1;
for(int x=j+1;x<c&&flag<k;x++)//新建临时变量x和判断长度用的flag
//跳出条件有flag达到要求和到头
{
if(s[i][x]=='#') break;//遇到障碍跳出
flag++;
}
if(flag>=k) ans++;//符合就答案+1
}
if(s[i+1][j]=='.')//向下枚举
{
int flag=1;
for(int x=i+1;x<r&&flag<k;x++)
{
if(s[x][j]=='#') break;
flag++;
}
if(flag>=k) ans++;
}
}
}
cout<<ans;
return 0;
}