P3654 First Step (ファーストステップ)
题目描述
可是……这个篮球场,好像很久没有使用过的样子啊……
里面堆满了学校的各种杂物呢……
我们 Aqours 的成员要怎么在里面列队站下呢?
我们浦之星女子学院的篮球场是一个 R 行 C 列的矩阵,其中堆满了各种学校的杂物 (用 #
表示),空地 (用 .
表示) 好像并不多的样子呢……
我们 Aqours 现在已经一共有 K 个队员了,要歌唱舞蹈起来的话,我们得排成一条 1×K 的直线,一个接一个地站在篮球场的空地上呢 (横竖均可)。
我们想知道一共有多少种可行的站位方式呢。
Aqours 的真正的粉丝的你,能帮我们算算吗?
输入格式
第一行三个整数 R,C,K。
接下来的 R 行 C 列,表示浦之星女子学院篮球场。
输出格式
总共的站位方式数量。
题目分析
这是一道暴力的问题,分别判断一个点的向下和向右方向上是否满足条件即可。
特殊情况:k == 1的时候向下和向上没区别,总数sum需要除以2。
代码
#include<stdio.h>
int r, c, k, sum = 0;
char a[200][200]={0};
void check(int a1, int b){
//判断是否满足条件
//下边
int f = 0;
for (int i = a1; i < a1 + k; i++){
if(a[i][b] != '.'){
f = 1;
break;
}
}
if(!f)sum++;
f = 0;
//右边
for (int i = b; i < b + k; i++){
if(a[a1][i] != '.'){
f = 1;
break;
}
}
if(!f)sum++;
}
int main()
{
//输入
scanf("%d %d %d ", &r, &c, &k);
for (int i = 0; i < r; i++){
scanf("%s ", &a[i]);
}
for(int i = 0; i < r; i++){
for(int j = 0; j < c; j++){
check(i, j);
}
}
if(k == 1){
printf("%d", sum / 2);
}else{
printf("%d", sum);
}
return 0;
}