看电影

Description

   wjh要去看电影,邀请了lmb,xxb,cly,yzj,ckx等人,最后有k个人同意一起去。要去的电影院的位置是矩阵型的,其中’#’表示已经被人预定了,’*’表示空位,他们打算挑同一行或者同一列连续的座位坐在一起,现在给出k和位置的预定请况,试问有几种坐位置的方法。

 

Input

 第一行输入两个数n和k,n表示电影院的位置是n*n的。(0<n<=10,0<=k<10)

接下在n行,每行n个字符,表示位置的预订情况。

Output

 一行输出有几种坐法。

Sample Input

4 1 **## *### #### ####

Sample Output

4

HINT

 

 如所示样例,用w表示wjh,用l表示另一人,四种坐法如下:

 

wl##

*###

####

####

 

 

lw##

*###

####

####

 

 

w*##

l###

####

####

 

 

l*##

w###

####

####

题解

很简单暴力纵向横向都搜索一下就是了,注意当k为0(即只有wjh一个人的时候)答案要除以2

#include<bits/stdc++.h>
using namespace std;
char s[108][108];
int main(){
    freopen("data10.in","r",stdin);
    freopen("data10.out","w",stdout);
    int n,k;
    scanf("%d%d",&n,&k);
    k++;
    for(int i=0;i<n;i++){
        scanf("%s",s[i]);
    }
    int ans=0;
    for(int i=0;i<n;i++){
        int sum=0;
        for(int j=0;j<n;j++){
            if(s[i][j]=='#'){
                if(sum>=k){
                    ans+=sum-k+1;
                }
                sum=0;
            }
            else{
                sum++;
            }
        }
        if(sum>=k){
            ans+=sum-k+1;
        }
    }
    for(int i=0;i<n;i++){
        int sum=0;
        for(int j=0;j<n;j++){
            if(s[j][i]=='#'){
                if(sum>=k){
                    ans+=sum-k+1;
                }
                sum=0;
            }
            else{
                sum++;
            }
        }
        if(sum>=k){
            ans+=sum-k+1;
        }
    }
    if(k==1) ans/=2;
    int c=1;
    for(int i=1;i<=k;i++){
        c*=i;
    }
    ans*=c;
    printf("%d\n",ans);
}

 

全部评论

相关推荐

昨天 11:15
中南大学 Java
好可爱的hr姐姐哈哈哈哈
黑皮白袜臭脚体育生:兄弟们貂蝉在一起,吕布开了
点赞 评论 收藏
分享
线性袋鼠:别听牛客上一帮伪人在那说,小厂不能去,必须去大厂,听他们放屁吧。学院本+一些一本最终的归宿就是中小厂,大厂那么好进吗
我的实习日记
点赞 评论 收藏
分享
05-29 22:11
门头沟学院 Java
Elastic90:抛开学历造假不谈,这公司的招聘需求也挺怪的,Java开发还要求你有图文识别、移动端开发和c++的经验,有点逆天了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务