【よくわかる解説!】ABC351 C問題 〜普通に順番に処理〜

ABC

解説動画

実装の方針

  1. 空のvectorを準備
  2. ボールをvectorの末尾に追加していく.
  3. 配列の末尾と末尾から1個前の要素が等しいかどうかを比較(vectorのサイズが2以上の場合)
    1.  等しかった場合
      1. vector末尾を削除して、(削除した後のvectorの)末尾の数値を+1する

コード

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i, n) for (int i = 0; i < (n); ++i)

int main() {
    int n;
    cin >> n;

    vector vec;
    rep(i, n) {
        int a;
        cin >> a;
        vec.push_back(a);

        while (vec.size() >= 2 && vec[vec.size() - 1] == vec[vec.size() - 2]) {
            vec.pop_back();
            vec.back()++;
        }
    }

    cout << vec.size() << endl;

    return 0;
}

コメント