CF919C
不要爆搜!!!
蒟蒻用搜索后觉得是常数问题,卡了半天常数才知道爆搜不可能过。
正解也非常简单,开两个二重循环,数每行每列连续的空格就可以了。
#include<bits/stdc++.h>
using namespace std;
int n,m,k,ans;
int a[2001][2001];
int main()
{
char a1;
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++){
a1=getchar();
for(int j=1;j<=m;j++){
a1=getchar();
if(a1=='.')a[i][j]=1;
}
}
for(int i=1;i<=n;i++){//数每一行连着的空格
int l=0;
for(int j=1;j<=m;j++){
if(a[i][j]==1)l++;
if(!a[i][j]||j==m){
if(l>=k)ans+=l-k+1;
l=0;
}
}
}
for(int i=1;i<=m;i++){//数每一列连着的空格
int l=0;
for(int j=1;j<=n;j++){
if(a[j][i]==1)l++;
if(!a[j][i]||j==n){
if(l>=k)ans+=l-k+1;
l=0;
}
}
}
if(k==1)ans/=2;//当k=1时,分别向下向右了两遍,需要除以二。
printf("%d",ans);
return 0;
}