P3654
题目
题目描述:
可是……这个篮球场,好像很久没有使用过的样子啊……
里面堆满了学校的各种杂物呢……
我们 Aqours 的成员要怎么在里面列队站下呢?
我们浦之星女子学院的篮球场是一个 R 行 C 列的矩阵,其中堆满了各种学校的杂物 (用 # 表示),空地 (用 . 表示) 好像并不多的样子呢……
我们 Aqours 现在已经一共有 K 个队员了,要歌唱舞蹈起来的话,我们得排成一条 1×K 的直线,一个接一个地站在篮球场的空地上呢 (横竖均可)。
我们想知道一共有多少种可行的站位方式呢。
Aqours 的真正的粉丝的你,能帮我们算算吗?
输入格式:
第一行三个整数 R,C,K。
接下来的 R 行 C 列,表示浦之星女子学院篮球场。
输出格式:
总共的站位方式数量。
数据范围与说明:
|
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) |
无 |
对于所有数据,1≤R,C≤100,1≤k≤min(R,C)。
以下是彩蛋
在 LoveLive!Sunshine!! 动画第一季第三集中,Aqours 队长高海千歌演唱“最喜欢的话就没问题!”到副歌前时,学校因为雷击停电。
输入输出样例 #1
输入:
1 2 3 4 5 6
| 5 5 2 .###. ##.#. ..#.. #..#. #.###
|
输出:
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| #include<bits/stdc++.h> using namespace std; char a[105][105]; int r,c,k; long long ans; bool check(int i,int j){ return i>=0&&i<r&&j>=0&&j<c; } void dfsr(int i,int j,int cnt){ if(cnt==k){ ans++; return ; } if(!check(i,j)) return ; if(a[i][j+1]=='.'){ dfsr(i,j+1,cnt+1); } return ; } void dfsu(int i,int j,int cnt){ if(cnt==k){ ans++; return ; } if(!check(i,j)) return ; if(a[i+1][j]=='.'){ dfsu(i+1,j,cnt+1); } return ; } int main(){ cin>>r>>c>>k; for(int i=0;i<r;i++){ for(int j=0;j<c;j++){ cin>>a[i][j]; } } for(int i=0;i<r;i++){ for(int j=0;j<c;j++){ if(a[i][j]=='.'){ dfsr(i,j,1); dfsu(i,j,1); } } } if(k==1){ cout<<ans/2; }else{ cout<<ans; } return 0; }
|