Official

B - Same Editorial by MMNMM


初心者の方へ

  • AtCoder をはじめたばかりで何をしたらよいか分からない方は、まずは practice contest の問題A「Welcome to AtCoder」を解いてみてください。基本的な入出力の方法が載っています。
  • また、プログラミングコンテストの問題に慣れていない方は、AtCoder Beginners Selection の問題をいくつか解いてみることをおすすめします。
  • C++入門 AtCoder Programming Guide for beginners (APG4b) は、競技プログラミングのための C++ 入門用コンテンツです。

素朴な方法

「\(A _ 1,A _ 2,\ldots,A _ N\) がすべて等しい」ことは、「\(A\) のどの \(2\) つの要素を取り出しても等しい」ことと同値です。

よって、\(A\) をすべて読み込んで、ありえる \(2\) つのペアすべてについて値が等しいかを判定すればよいです。

実装例は以下のようになります。

#include <iostream>
#include <vector>

using namespace std;

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

    vector<int> A(N);
    for(int i = 0; i < N; ++i) // A をすべて入力する
        cin >> A[i];

    for(int i = 0; i < N; ++i)
        for(int j = 0; j < N; ++j)
            if(A[i] != A[j]){ // 違うペアがあったら
                cout << "No" << endl; // No と出力して
                return 0; // 終了
            }

    // 違うペアがなかったら
    cout << "Yes" << endl; // Yes と出力して
    return 0; // 終了
}
#include <iostream>
#include <vector>

using namespace std;

int main() {
    int N;
    cin >> N;
    
    vector<int> A(N);
    for(auto&& a : A) // A をすべて入力する
        cin >> a;
    
    for(auto a : A)
        for(auto b : A)
            if(a != b){ // 違うペアがあったら
                cout << "No" << endl; // No と出力して
                return 0; // 終了
            }
    
    // 違うペアがなかったら
    cout << "Yes" << endl; // Yes と出力して
    return 0; // 終了
}
N = int(input())
A = list(map(int, input().split())) # A をすべて読み込む

for a in A:
    for b in A:
        if a != b: # 違うペアがあったら
            print('No') # No と出力して
            break # ループを抜ける
    else: # 違うペアがなかったら
        continue # 探索を続ける
    break
else: # 最後まで違うペアがなかったら
    print('Yes') # Yes と出力

より高速な方法

\(A _ 1,A _ 2,\ldots,A _ N\) がすべて等しい」ことは、「\(A _ 2,A _ 3,\ldots,A _ N\) がすべて \(A _ 1\) と等しい」ことと同値です。

なので、\(N\)\(A _ 1\) を入力して、残りが \(A _ 1\) と等しいかを判定すればよいです。 これは、等しくない値があればその時点で No と出力して終了し、全てを判定し終わったら Yes と出力すると実装が簡便になります。

実装例は以下のようになります。

#include <iostream>

using namespace std;

int main() {
    int N, A1; // A の先頭を先に読んでおく
    cin >> N >> A1;

    for (int i = 1; i < N; ++i) { // A の残りについて
        int A;
        cin >> A; // 読み込んで
        if (A != A1) { // 等しくなければ No を出力して終了
            cout << "No" << endl;
            return 0;
        }
    }
    // すべて判定が終わってここに到達したら Yes
    cout << "Yes" << endl;
    return 0;
}
N = int(input())
A1, *A = map(int, input().split()) # A の先頭とそれ以外に分ける

for a in A:
    if A1 != a: # 異なる要素があったら No
        print('No')
        break
else: # break されなかったら Yes
    print('Yes')

posted:
last update: