はじめに
たなしょです。
自力で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)もフォローしていただけると幸いです!