OilDrum's PLAYGROUND

どらむかんのゲーム日記サイト

当サイトの記事にはプロモーションが含まれています。

ABC396 - A - Triple Four

最終更新:2025-03-20 投稿日:2025-03-20

2025/03/08に行われたAtCoder Beginner Contest 396のA問題の解法についての記事です。

考えたこと

\( 3 \leq N \leq 100 \)なので、端から端まで\( 3 \)つずつの値がすべて一致するか愚直に確かめていくことで回答に辿り着けそうです。

コードの例

#include <bits/stdc++.h>using namespace std;int main() {    int N;    cin >> N;    vector<int> A(N);    for (int i = 0; i < N; i++) {        cin >> A.at(i);    }    for (int i = 0; i < N - 2; i++) {        if (A.at(i) == A.at(i + 1) && A.at(i + 1) == A.at(i + 2)) {            cout << "Yes" << endl;            return 0;        }    }    cout << "No" << endl;    return 0;}

解法

与えられた\( N \)に対して、数列\( A \)に値を代入していきます。

その後\( A \)に同じ値が3つ並んだ部分がないか、端からチェックを行い、チェックがtrueならその場で"Yes"を返して処理を終了します。
処理が途中で終了せず、最後まで到達した場合は、どの3つ並んだ部分も条件を満たさないことになるため、"No"を返します。

なお、上記の例では\([0, N-2) \)に対してfor文で処理を行いましたが、問題文では\( A_1 ~ A_{N-2} \)に対して操作を行うようにヒントが出ています。この対応関係がすぐに思い浮かばない場合、次のように書くことでも回答となります。

コードの例2

#include <bits/stdc++.h>using namespace std;int main() {    int N;    cin >> N;    vector<int> A(N + 1);    for (int i = 1; i <= N; i++) {        cin >> A.at(i);    }    for (int i = 1; i <= N - 2; i++) {        if (A.at(i) == A.at(i + 1) && A.at(i + 1) == A.at(i + 2)) {            cout << "Yes" << endl;            return 0;        }    }    cout << "No" << endl;    return 0;}