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

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

题目背景
知らないことばかりなにもかもが(どうしたらいいの?)
一切的一切 尽是充满了未知数(该如何是好)
それでも期待で足が軽いよ(ジャンプだ!)
但我仍因满怀期待而步伐轻盈(起跳吧!)
温度差なんていつか消しちゃえってね
冷若冰霜的态度 有朝一日将会消失得无影无踪
元気だよ元気をだしていくよ
拿出活力 打起精神向前迈进吧
我们 Aqours,要第一次举办演唱会啦!
虽然学生会长看上去不怎么支持我们的样子,可是有了理事长的支持,我们还是被允许在校内的篮球场里歌唱!
歌曲也好好地准备过了,名字叫“最喜欢的话就没问题! (ダイスキだったらダイジョウブ!)“,大家一定会喜欢的吧!
演唱会一定会顺利进行的!
希望不要发生停电什么的事故哦……!

题目描述
可是……这个篮球场,好像很久没有使用过的样子啊……
里面堆满了学校的各种杂物呢……
我们 Aqours 的成员要怎么在里面列队站下呢?

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

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

我们想知道一共有多少种可行的站位方式呢。
Aqours 的真正的粉丝的你,能帮我们算算吗?

首先,我写的很长,但是很简单,不要怕。
首先我要分成三种情况:
第一种:有一个队员,那我只需要知道有几个空地就有几个占位;
第二种:一个队员的都没有(有点坑,谁闲的没事计算完了告诉我没队员),直接输出0 就可以;
第三种:使用两个循环,找到空地之后继续往后面找,如果连续的数量有K个,就记录下来。找的时候先横着找,然后再竖着找就可以了。

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,m;
    cin>>n>>m;
    char a[120][120];
    int p;
    cin>>p;
    int sum=0;

    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
        }
    }
    //第一种情况
    if(p==1){
        int t=0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                if(a[i][j]=='.')
                    t++;
            }
        }
        cout<<t;
        return 0;
    }
    //第二种情况
    else if(p==0){
        cout<<"0";
        return 0;
    }
    //第三种情况
    //横着找
    else{
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(a[i][j]=='.'){
                int flag=1;
                for(int k=j+1;;k++){
                    if(flag==p) {
                        sum++;
                        break;
                    }

                    if(a[i][k]!='.'){
                        break;
                    }
                    else{
                        flag++;
                    }
                }
            }
        }
    }
//竖着找
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            if(a[j][i]=='.'){
                int flag=1;
                for(int k=j+1;;k++){
                    if(flag==p) {
                        sum++;
                        break;
                    }
                    if(a[k][i]!='.'){
                        break;
                    }
                    else{
                        flag++;
                    }
                }
            }
        }
    }
    cout<<sum;
    return 0;}
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值