问题 E: E

题目描述

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);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_43506138/article/details/87918270
E
e'e