题解: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;
}

(蒟蒻第一次写题解,求管理员大大通过!)

如果有可以改进的地方,可以在评论区指出

都看到这了,点个赞再走呗~