当前位置: 首页 > article >正文

【洛谷 P3654】First Step (ファーストステップ) 题解(模拟+循环枚举)

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

题目背景

知らないことばかりなにもかもが(どうしたらいいの?)
一切的一切 尽是充满了未知数(该如何是好)
それでも期待で足が軽いよ(ジャンプだ!)
但我仍因满怀期待而步伐轻盈(起跳吧!)
温度差なんていつか消しちゃえってね
冷若冰霜的态度 有朝一日将会消失得无影无踪
元気だよ元気をだしていくよ
拿出活力 打起精神向前迈进吧

我们 Aqours,要第一次举办演唱会啦!

虽然学生会长看上去不怎么支持我们的样子,可是有了理事长的支持,我们还是被允许在校内的篮球场里歌唱!

歌曲也好好地准备过了,名字叫“最喜欢的话就没问题! (ダイスキだったらダイジョウブ!)“,大家一定会喜欢的吧!

演唱会一定会顺利进行的!

希望不要发生停电什么的事故哦……!

题目描述

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

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

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

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

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

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

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

输入格式

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

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

输出格式

总共的站位方式数量。

样例 #1

样例输入 #1

5 5 2
.###.
##.#.
..#..
#..#.
#.###

样例输出 #1

8

提示

R R R C C C K K K备注
1 ∼ 2 1\sim2 12 ≤ 10 \leq 10 10 ≤ 10 \leq 10 10 ≤ min ⁡ ( R , C ) \leq \min(R,C) min(R,C)
3 ∼ 4 3\sim4 34 ≤ 100 \leq 100 100 ≤ 100 \leq 100 100 ≤ 1 \leq 1 1
5 ∼ 6 5\sim6 56 ≤ 100 \leq 100 100 ≤ 100 \leq 100 100 ≤ min ⁡ ( R , C ) \leq \min(R,C) min(R,C)没有障碍
7 ∼ 10 7\sim10 710 ≤ 100 \leq 100 100 ≤ 100 \leq 100 100 ≤ min ⁡ ( R , C ) \leq \min(R,C) min(R,C)

对于所有数据, 1 ≤ R , C ≤ 100 1 \leq R,C \leq 100 1R,C100 1 ≤ k ≤ min ⁡ ( R , C ) 1 \leq k \leq \min(R,C) 1kmin(R,C)

以下是彩蛋

在 LoveLive!Sunshine!! 动画第一季第三集中,Aqours 队长高海千歌演唱“最喜欢的话就没问题!”到副歌前时,学校因为雷击停电。


思路

我趣,二次元!

遍历整个篮球场,对于每个位置,判断其右侧和下方连续的空地数量是否大于等于k。如果满足条件,则将可行的排列方式数量加1。

注意:当只有一个人时,即 k = 1 时,不要重复计算横向排列和纵向排列两种排列方式!


AC代码

#include <iostream>
#define AUTHOR "HEX9CF"
using namespace std;

const int N = 105;

int r, c, k;
int ans = 0;
char a[N][N];

int main()
{
    cin >> r >> c >> k;

    for (int i = 1; i <= r; i++)
    {
        for (int j = 1; j <= c; j++)
        {
            cin >> a[i][j];
        }
    }

    for (int i = 1; i <= r; i++)
    {
        int t = 0;
        for (int j = 1; j <= c; j++)
        {
            if ('#' == a[i][j])
            {
                t = 0;
                continue;
            }
            else
            {
                t++;
            }
            if (t >= k)
            {
                ans++;
            }
        }
    }

    if (k != 1)
    {
        for (int j = 1; j <= c; j++)
        {
            int t = 0;
            for (int i = 1; i <= r; i++)
            {
                if ('#' == a[i][j])
                {
                    t = 0;
                    continue;
                }
                else
                {
                    t++;
                }
                if (t >= k)
                {
                    ans++;
                }
            }
        }
    }

    cout << ans << endl;
    return 0;
}

http://www.kler.cn/a/106805.html

相关文章:

  • 使用热冻结数据层生命周期优化在 Elastic Cloud 中存储日志的成本
  • STM32学习笔记-----UART的概念
  • 数据结构--数组
  • 在 WPF 中,如何实现数据的双向绑定?
  • `node-gyp` 无法找到版本为 `10.0.19041.0` 的 Windows SDK
  • Spring高手之路26——全方位掌握事务监听器
  • 增强常见问题解答搜索引擎:在 Elasticsearch 中利用 KNN 的力量
  • 2023年MathorCup高校数学建模挑战赛大数据挑战赛赛题浅析
  • 用Python做数据分析之数据筛选及分类汇总
  • 【Python机器学习】零基础掌握gaussian_process高斯过程中的核函数
  • Python通过pyecharts对爬虫房地产数据进行数据可视化分析(一)
  • 自定义一个注解,用它标记的执行并于给定值做对比(即简单的junit)
  • 王道p149 7.二叉树按二叉链表形式存储,写一个判别给定二叉树是否是完全二叉树的算法(c语言代码实现)
  • APScheduler-调度器AsyncIOScheduler
  • Ansible任务控制loop循环、when和block条件判断介绍演示
  • Leetcode刷题详解——点名
  • LeetCode75——Day18
  • 浏览器下载视频插件使用
  • postgis ST_ClipByBox2D用法
  • centos7安装mysql
  • asp.net core获取config和env
  • 推荐一本书《变速领导力》
  • 论文阅读 - Learning Human Interactions with the Influence Model
  • Go 语言操作 MongoDb
  • 23 行为型模式-迭代器模式
  • node实战——搭建带swagger接口文档的后端koa项目(node后端就业储备知识)