题解:P13821 「Diligent-OI R2 A」蒹葭苍苍
题目传送门
(蒟蒻不会一维做法,所以开了一个二维数组)
思路
因为只能向上、下或右方向,所以不可以往左回头,如果你决定往右走,就必须保证可以直接往下走到终点。
先用一个bool类型的二维数组将整个地图存起来(1表示可以走,0表示障碍物),然后判断当前格子下面这一整列有木有障碍物(最后一行除外,因为最后一行没有下面了)。如果没有就可以走(ans++),否则会被堵住,不可以往这格走。
完结撒花🌸
(嘻嘻骗你的:)这时候我们还没有到终点呢,前面只走到了第n-1行,所以要加上第n行的格数,这样才对✅
不懂看注释吧
贴上代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
bool a[105][105];
int b[105];
signed main() {
int n;
cin >> n;
int x;
for(int i = 1;i <= n;i++)
{
cin >> x;
b[i] = x;
for(int j = 1;j <= x;j++)
{
a[i][j] = 1;//标记可以走
}
}
int ans = 0;//计数器
for(int i = 1;i < n;i++)
{
for(int j = 1;j <= b[i];j++)
{
bool s = 1;
for(int z = i + 1;z <= n;z++)
{
if(!a[z][j])//a[z][j]为false
{
s = 0;//不可以走
break;
}
}
if(s)
{
ans++;
}
}
}
cout << ans + b[n] << '\n';//务必加上最后一行
return 0;
}
(蒟蒻第一次写题解,求管理员大大通过!)
如果有可以改进的地方,可以在评论区指出