たなしょのメモ

日々勉強していることをつらつらと

C - Build Stairs

はじめに

たなしょです。

自力でC問題を解ける日が来るとは。。。とても嬉しいです。 これからも精進していきます。

問題文

https://atcoder.jp/contests/abc136/tasks/abc136_c

考え方

N - 1番目の要素から考えていきます。 N - 1番目の要素とN - 2番目の要素を比較してN - 2番目の要素が大きければ要素を-1して再度比較します。 比較してまだN - 2番目の要素が大きければbreakで繰り返しを抜けてNoを出力します。単調非減少であれば繰り返しを続けてN - 2番目の要素とN - 3番目の要素を比較しにいきます。 0番目の要素まで比較できたらYesを繰り返します。

いざ実装

#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
#include <cstdlib>

typedef long long ll;

using namespace std;

int main() {
    int N, flg = 0;
    cin >> N;

    vector<int> data(N);

    // 代入
    for (int i = 0; i < N; i++) {
        cin >> data.at(i);
    }
    
    // 比較
    for (int i = N - 1; i >= 1; i--) {
        // 比較して単調非減少でない場合
        if (data.at(i-1) > data.at(i)) {
            data.at(i-1) -= 1;
            // i-1番目の数字を-1しても単調非減少でない場合
            if (data.at(i-1) > data.at(i)) {
                flg = 1;
                break;
            }
        }
    }


    if ( flg == 0 ) {
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
    }

    

    return 0;
}

最後に

ABCで初めてC問題が解けました。嬉しいです!これからも頑張っていきます。

最後まで読んでいただいてありがとうございました。 もしよろしければtwitterアカウント(@piklus100yen)もフォローしていただけると幸いです!