题解 洛谷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; }
不要妄图追上西坠的太阳,而是要在黎明前就等着它!