洛谷 P3654. First step -- 分别在行和列 暴力枚举的应用
First Step (ファーストステップ)
题目背景
知らないことばかりなにもかもが(どうしたらいいの?)
一切的一切 尽是充满了未知数(该如何是好)
それでも期待で足が軽いよ(ジャンプだ!)
但我仍因满怀期待而步伐轻盈(起跳吧!)
温度差なんていつか消しちゃえってね
冷若冰霜的态度 有朝一日将会消失得无影无踪
元気だよ元気をだしていくよ
拿出活力 打起精神向前迈进吧
我们 Aqours,要第一次举办演唱会啦!
虽然学生会长看上去不怎么支持我们的样子,可是有了理事长的支持,我们还是被允许在校内的篮球场里歌唱!
歌曲也好好地准备过了,名字叫“最喜欢的话就没问题! (ダイスキだったらダイジョウブ!)“,大家一定会喜欢的吧!
演唱会一定会顺利进行的!
希望不要发生停电什么的事故哦……!
题目描述
可是……这个篮球场,好像很久没有使用过的样子啊……
里面堆满了学校的各种杂物呢……
我们 Aqours 的成员要怎么在里面列队站下呢?
我们浦之星女子学院的篮球场是一个 \(R\) 行 \(C\) 列的矩阵,其中堆满了各种学校的杂物 (用 #
表示),空地 (用 .
表示) 好像并不多的样子呢……
我们 Aqours 现在已经一共有 \(K\) 个队员了,要歌唱舞蹈起来的话,我们得排成一条 \(1\times K\) 的直线,一个接一个地站在篮球场的空地上呢 (横竖均可)。
我们想知道一共有多少种可行的站位方式呢。
Aqours 的真正的粉丝的你,能帮我们算算吗?
输入格式
第一行三个整数 \(R, C, K\)。
接下来的 \(R\) 行 \(C\) 列,表示浦之星女子学院篮球场。
输出格式
总共的站位方式数量。
样例 #1
样例输入 #1
5 5 2
.###.
##.#.
..#..
#..#.
#.###
样例输出 #1
8
提示
\(R\)
\(C\)
\(K\)
备注
\(1\sim2\)
\(\leq 10\)
\(\leq 10\)
\(\leq \min(R,C)\)
无
\(3\sim4\)
\(\leq 100\)
\(\leq 100\)
\(\leq 1\)
无
\(5\sim6\)
\(\leq 100\)
\(\leq 100\)
\(\leq \min(R,C)\)
没有障碍
\(7\sim10\)
\(\leq 100\)
\(\leq 100\)
\(\leq \min(R,C)\)
无
对于所有数据,\(1 \leq R,C \leq 100\),\(1 \leq k \leq \min(R,C)\)。
以下是彩蛋
在 LoveLive!Sunshine!! 动画第一季第三集中,Aqours 队长高海千歌演唱“最喜欢的话就没问题!”到副歌前时,学校因为雷击停电。
题解
貌似是第一次独立完整做出暴力枚举
这题刚开始只通过了八个数据点 因为没有考虑到k==1的情况
这种情况要特殊处理 后面自己测数据做出来了
本题还是枚举的基本思想
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
char g[N][N];
int n, m, k, cnt;
int main()
{
scanf("%d%d%d", &n, &m, &k);
for (int i = 1; i <= n; i ++ )
{
for (int j = 1; j <= m; j ++ )
{
cin >> g[i][j];
}
}
//check竖着的
for (int h = 1; h <= m; h ++ )
{
for (int i = 1; i <= n - k + 1; i ++ )
{
if (g[i][h] == '.')
{
if (k != 1)
for (int j = i + 1; j - i < k; j ++ )
{
if (g[j][h] == '#') break;
if (j - i == k - 1) cnt ++ ;
}
else cnt ++ ; //这里是k==1的情况 当i是'.'的时候就 ++ ,并且由于k=1时横竖记录会重复 我们只用在一个check里面记录就可以了
}
}
}
//check横着的
for (int h = 1; h <= n; h ++ )
{
for (int i = 1; i <= m - k + 1; i ++ )
{
if (g[h][i] == '.')
{
if (k != 1)
for (int j = i + 1; j - i < k; j ++ )
{
if (g[h][j] == '#') break;
if (j - i == k - 1) cnt ++ ;
}
}
}
}
printf("%d\n", cnt);
return 0;
}