题解 洛谷P3654 【First Step (ファーストステップ)】

蒟蒻又来发题解了...

这道题目,我们可以用暴力枚举解决。

首先,我们要枚举1*k矩阵的起点。

其次,我们需要判断两种情况:横着,竖着。

有一种特殊情况,即k=1时,横着竖着都一样,这只能算一种情况。

没看懂的不妨看看代码中的注释。

#include<bits/stdc++.h>
using namespace std;
int Line,Column,Should;
char Map[101][101];
int main()
{
    register int i,j,k;
    cin>>Line>>Column>>Should;//输入行、列、k
    for(i=1;i<=Line;i++)
    {
        for(j=1;j<=Column;j++)
        {
            cin>>Map[i][j];//扫描地图
        }
    }
    register int Sum=0;
    for(i=1;i<=Line;i++)//枚举起点的横坐标
    {
        for(j=1;j<=Column;j++)//枚举起点的纵坐标
        {
            bool Flag=true;//假设有解
            for(k=0;k<Should;k++)//横着看
            {
                register int Now;
                Now=i+k;
                if(Map[Now][j]=='#'||Now>Line)//如果越界或是撞墙,那么不行
                {
                    Flag=false;
                    break;
                }
            }
            if(Flag)
            {
                Sum++;
            }
            Flag=true;
            for(k=0;k<Should;k++)//竖着看
            {
                register int Now;
                Now=j+k;
                if(Map[i][Now]=='#'||Now>Column)//如果越界或是撞墙,那么不行
                {
                    Flag=false;
                    break;
                }
            }
            if(Flag&&Should!=1)//当K=1时,两种情况仅算一种
            {
                Sum++;
            }
        }
    }
    cout<<Sum<<endl;
    return 0;
}
View Code
posted @ 2020-08-08 15:05  Bushuai_Tang  阅读(188)  评论(0编辑  收藏  举报