https://www.luogu.org/contest/show?tid=1614

 

TB P3654 First Step (ファーストステップ)

https://www.luogu.org/problem/show?pid=3654

题目描述

可是……这个篮球场,好像很久没有使用过的样子啊……

里面堆满了学校的各种杂物呢……

我们Aqours的成员要怎么在里面列队站下呢?

我们浦之星女子学院的篮球场是一个R行C列的矩阵,其中堆满了各种学校的杂物 (用"#"表示),空地 (用"."表示) 好像并不多的样子呢……

我们Aqours现在已经一共有K个队员了,要歌唱舞蹈起来的话,我们得排成一条1*K的直线,一个接一个地站在篮球场的空地上呢 (横竖均可)。

我们想知道一共有多少种可行的站位方式呢。

Aqours的真正的粉丝的你,能帮我们算算吗?

输入输出格式

输入格式:

 

第一行三个整数 R, C, K。

接下来的R行C列,是浦之星女子学院篮球场。

 

输出格式:

 

总共的站位方式数量。

 

输入输出样例

输入样例#1:
5 5 2
.###.
##.#.
..#..
#..#.
#.###
输出样例#1:
8

说明

          R        C          K         备注
1-2      <=10     <=10       <=min(R,C)  无
3-4      <=100    <=100      1           无        
5-6      <=100    <=100      <=min(R,C)  没有障碍
7-10     <=100    <=100      <=min(R,C)  无

横着、竖着各遍历一遍数据,每个连续空地长度为l,则答案加上l-k+1

注意:当k=1时,两次遍历结果一样,所以要将答案除2,或开始特判k=1

因为忽略了k=1所以第一次提交80

#include<cstdio>
#include<iostream>
using namespace std;
int r,c,k;
int a[102][102];
int main()
{
    scanf("%d%d%d",&r,&c,&k);
    char ch;
    for(int i=1;i<=r;i++)
         for(int j=1;j<=c;j++)
          {
               cin>>ch; 
               if(ch=='.') a[i][j]=1;
          }
    int ans=0,now=0;
    if(k==1)
    {
     for(int i=1;i<=r;i++)
         for(int j=1;j<=c;j++)
          {
               if(a[i][j]) ans++;
          }
     printf("%d",ans);
     return 0;
    }
    for(int i=1;i<=r;i++)
    {
        now=0;
        for(int j=1;j<=c+1;j++)
        {
            if(a[i][j]==1) now++;
            else 
            {
                ans+=now-k+1>0 ? now-k+1:0;
                now=0;
            }
        }
        //if(a[i][c]) ans+=now-k+1>0 ? now-k+1:0;
    }
    for(int j=1;j<=c;j++)
    {
        now=0;
        for(int i=1;i<=r+1;i++)
        {
            if(a[i][j]==1) now++;
            else
            {
                ans+=now-k+1>0 ? now-k+1:0;
                now=0;
            }
        }
        //if(a[r][j]) ans+=now-k+1>0 ? now-k+1:0;
    }
    printf("%d",ans);
    
} 
View Code

相关文章:

  • 2021-08-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-20
  • 2021-06-05
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-07-17
  • 2021-10-10
  • 2021-08-10
  • 2019-03-03
  • 2022-01-23
相关资源
相似解决方案