思路:直接暴力
我是先横行再竖行查找空地,边查边改答案
代码冗长,但我找不到错误
只有80分,第四个第五个测试点没过
求指点QWQ;
#include<bits/stdc++.h>
using namespace std;
char a[1000][1000];
int x[1000],y[1000],as=0;
int main(){
int n=0,m=0,k=0;
cin>>n>>m>>k;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>a[i][j];
for(int i=0;i<n;i++){
int ty=0;
for(int j=0;j<m+1;j++){
if(a[i][j]=='.') ty++;
else{
y[i]=max(ty,y[i]);
ty=0;
if(y[i]>=k){
as+=y[i]-k+1;
y[i]=0;
}
}
}
}
for(int i=0;i<m;i++){
int tx=0;
for(int j=0;j<n+1;j++){
if(a[j][i]=='.') tx++;
else{
x[i]=max(tx,x[i]);
tx=0;
if(x[i]>=k){
as+=x[i]-k+1;
x[i]=0;
}
}
}
}
cout<<as;
return 0;
}