题目背景
知らないことばかりなにもかもが(どうしたらいいの?)
一切的一切 尽是充满了未知数(该如何是好)
それでも期待で足が軽いよ(ジャンプだ!)
但我仍因满怀期待而步伐轻盈(起跳吧!)
温度差なんていつか消しちゃえってね
冷若冰霜的态度 有朝一日将会消失得无影无踪
元気だよ元気をだしていくよ
拿出活力 打起精神向前迈进吧
我们 Aqours,要第一次举办演唱会啦!
虽然学生会长看上去不怎么支持我们的样子,可是有了理事长的支持,我们还是被允许在校内的篮球场里歌唱!
歌曲也好好地准备过了,名字叫“最喜欢的话就没问题! (ダイスキだったらダイジョウブ!)“,大家一定会喜欢的吧!
演唱会一定会顺利进行的!
希望不要发生停电什么的事故哦……!
题目描述
可是……这个篮球场,好像很久没有使用过的样子啊……
里面堆满了学校的各种杂物呢……
我们 Aqours 的成员要怎么在里面列队站下呢?
我们浦之星女子学院的篮球场是一个 RR 行 CC 列的矩阵,其中堆满了各种学校的杂物 (用 #
表示),空地 (用 .
表示) 好像并不多的样子呢……
我们 Aqours 现在已经一共有 KK 个队员了,要歌唱舞蹈起来的话,我们得排成一条 1\times K1×K 的直线,一个接一个地站在篮球场的空地上呢 (横竖均可)。
我们想知道一共有多少种可行的站位方式呢。
Aqours 的真正的粉丝的你,能帮我们算算吗?
输入格式
第一行三个整数 R, C, KR,C,K。
接下来的 RR 行 CC 列,表示浦之星女子学院篮球场。
输出格式
总共的站位方式数量。
输入输出样例
输入 #1复制
5 5 2 .###. ##.#. ..#.. #..#. #.###
输出 #1复制
8
说明/提示
RR | CC | KK | 备注 | |
---|---|---|---|---|
1\sim21∼2 | \leq 10≤10 | \leq 10≤10 | \leq \min(R,C)≤min(R,C) | 无 |
3\sim43∼4 | \leq 100≤100 | \leq 100≤100 | \leq 1≤1 | 无 |
5\sim65∼6 | \leq 100≤100 | \leq 100≤100 | \leq \min(R,C)≤min(R,C) | 没有障碍 |
7\sim107∼10 | \leq 100≤100 | \leq 100≤100 | \leq \min(R,C)≤min(R,C) | 无 |
对于所有数据,1 \leq R,C \leq 1001≤R,C≤100,1 \leq k \leq \min(R,C)1≤k≤min(R,C)。
以下是彩蛋
在 LoveLive!Sunshine!! 动画第一季第三集中,Aqours 队长高海千歌演唱“最喜欢的话就没问题!”到副歌前时,学校因为雷击停电。
这一题暴力枚举搜索满足条件的站位即可 横向搜索我采用了字符串比较来判定
竖向是通过判定并计数求得 相加为总count
注意:要考虑k=1时的情况 ,可以将count/2 ,我这里懒得改了 重新遍历了一遍....
#include<bits/stdc++.h>
using namespace std;
void target(int);
char b[101];
int main()
{
int r,c,k,i,count=0,j,flag=1;
char a[101][101];
cin>>r>>c>>k;
for(i=0;i<r;i++)
{
cin>>a[i];
}
target(k);
if(k>1)
{
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
if(strncmp(&a[i][j],b,k)==0)
{
count++;
}
}
}
flag=1;
for(j=0;j<c;j++)
{
for(i=0;i<r;i++)
{
if(a[i][j]=='.'&&a[i+1][j]=='.')
{
flag++;
}
else if(flag>=k&&(a[i][j]=='#'||i==r-1))
{
count=count+(flag-k)+1;
flag=1;
}
else if(a[i][j]=='#'||i==r-1)//注意要让flag归1 多次WA在这 :(
{
flag=1;
}
}
}
}
else if(k==1)//特判
{
for(j=0;j<c;j++)
{
for(i=0;i<r;i++)
{
if(a[i][j]=='.')
{
count++;
}
}
}
}
cout<<count;
return 0;
}
void target(int n)
{
int i;
for(i=0;i<n;i++)
{
b[i]='.';
}
b[n]='\0';
return ;
}