题目描述
k个人一起上车,车上有nm个座位,’‘代表位置上已经坐了人,’.'代表位置上还没有坐人,k个人必须连续坐在一起,问有多少种坐法?
输入
输入n,m,k,(1≤n,m,k≤2000)
题目有多组测试数据
输出
输出满足条件的情况种数
样例输入 Copy
2 3 2
**.
…
分析:
本题题意不是很明确,题目中连在一起的意思是只能横着连在一起, 或者竖着连在一起,不能斜着连在一起。
题意读懂后,我们会发现这个题可以暴力。但是,我在这里要上演骚代码了 哈哈。
具体见代码:
#include"stdio.h"
#include"string.h"
#include"algorithm"
using namespace std;
int main()
{
int vis[2001];
int n,m,k;
char c;
while(~scanf("%d%d%d",&n,&m,&k))
{
int ans=0;
scanf("%c",&c);
int temp=0;
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
scanf("%c",&c);
if(c=='.')
{
temp++;//统计每一行连着的'.'的个数
vis[j]++;//统计每一列连着的'.'的个数
}
else
{
temp=0;
vis[j]=0;
}
if(temp>=k)//如果连着的个数大于了k,则ans记数加1
ans++;
if(vis[j]>=k&&k!=1)//切记不能等于1
ans++;
}
temp=0;
getchar();
}
printf("%d\n",ans);
}
}