Lovelive 可还行?
一道由 lin_toto 精心制作的模拟、枚举题。
题目背景
知らないことばかりなにもかもが(どうしたらいいの?)
一切的一切 尽是充满了未知数(该如何是好)
それでも期待で足が軽いよ(ジャンプだ!)
但我仍因满怀期待而步伐轻盈(起跳吧!)
温度差なんていつか消しちゃえってね
冷若冰霜的态度 有朝一日将会消失得无影无踪
元気だよ元気をだしていくよ
拿出活力 打起精神向前迈进吧
我们 Aqours,要第一次举办演唱会啦!
虽然学生会长看上去不怎么支持我们的样子,可是有了理事长的支持,我们还是被允许在校内的篮球场里歌唱!
歌曲也好好地准备过了,名字叫 “最喜欢的话就没问题! (ダイスキだったらダイジョウブ!)“,大家一定会喜欢的吧!
演唱会一定会顺利进行的!
希望不要发生停电什么的事故哦……!
题目描述
可是…… 这个篮球场,好像很久没有使用过的样子啊……
里面堆满了学校的各种杂物呢……
我们 Aqours 的成员要怎么在里面列队站下呢?
我们浦之星女子学院的篮球场是一个 R 行 C 列的矩阵,其中堆满了各种学校的杂物 (用 #
表示),空地 (用 .
表示) 好像并不多的样子呢……
我们 Aqours 现在已经一共有 K 个队员了,要歌唱舞蹈起来的话,我们得排成一条 1×K 的直线,一个接一个地站在篮球场的空地上呢 (横竖均可)。
我们想知道一共有多少种可行的站位方式呢。
Aqours 的真正的粉丝的你,能帮我们算算吗?
输入格式
第一行三个整数 R,C,K。
接下来的 R 行 C 列,表示浦之星女子学院篮球场。
输出格式
总共的站位方式数量。
样例 #1
样例输入 #1
1 2 3 4 5 6
| 5 5 2 .###. ##.#. ..#.. #..#. #.###
|
样例输出 #1
提示
|
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 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 53 54 55 56 57
|
#include<iostream> using namespace std; int r,c,k,ans=0; bool f[101][101]; int clx[]={0,1},cly[]={1,0}; void check(int y,int x){ for(int i=0;i<2;i++){ int a=y,b=x; int cc=0; for(int p=1;p<=k;p++){ if(a>r||a<1||b>c||b<1){ continue; } if(f[a][b]==0){ cc++; } a+=cly[i]; b+=clx[i]; } if(cc==k){ ans++; } } f[y][x]=1; } int main(){ cin>>r>>c>>k; for(int i=1;i<=r;i++){ for(int o=1;o<=c;o++){ char a; cin>>a; if(a=='#'){ f[i][o]=1; } } } for(int i=1;i<=r;i++){ for(int o=1;o<=c;o++){ if(f[i][o]==0){ check(i,o); } } } if(k==1){ ans/=2; } cout<<ans<<endl; return 0; }
|