Official

A - Tiny Arithmetic Sequence Editorial by penguinman


解法1

\((A_1,A_2,A_3)\) の並び替えは \(6\) 通りあります。それぞれについて等差数列になっているかを判定することで、この問題を解くことができます。

解答例 (C++)

#include<bits/stdc++.h>
using namespace std;

int main(){
    int A1,A2,A3; cin >> A1 >> A2 >> A3;
    string ans = "No";
    //(A1,A2,A3)
    if(A3-A2 == A2-A1) ans = "Yes";
    //(A1,A3,A2)
    if(A2-A3 == A3-A1) ans = "Yes";
    //(A2,A1,A3)
    if(A3-A1 == A1-A2) ans = "Yes";
    //(A2,A3,A1)
    if(A1-A3 == A3-A2) ans = "Yes";
    //(A3,A1,A2)
    if(A2-A1 == A1-A3) ans = "Yes";
    //(A3,A2,A1)
    if(A1-A2 == A2-A3) ans = "Yes";
    cout << ans << endl;
}

また、\((a,b,c)\) が等差数列である場合 \((c,b,a)\) も等差数列になることを利用して、場合分けを \(3\) 通りに減らすことも可能です。

解答例 (Python)

A1,A2,A3 = map(int,input().split())
ans = "No"
#(A1,A2,A3)
if A3-A2 == A2-A1:
    ans = "Yes"
#(A1,A3,A2)
if A2-A3 == A3-A1:
    ans = "Yes"
#(A2,A1,A3)
if A3-A1 == A1-A2:
    ans = "Yes"
print(ans)

解法2

等差数列 \((a,b,c)\) は、広義単調増加/減少である必要があります。なぜなら \((b-a)\)\((c-b)\) の正/負/零が一致している必要があるからです。そのため \((A_1,A_2,A_3)\) を数列として受け取った上で昇順ないし降順にソートし、等差数列になっているかを判定するとより楽に AC することができます。

解答例 (C++)

#include<bits/stdc++.h>
using namespace std;

int main(){
    vector<int> A(3);
    cin >> A[0] >> A[1] >> A[2];
    sort(A.begin(),A.end());
    string ans = "No";
    if(A[2]-A[1] == A[1]-A[0]) ans = "Yes";
    cout << ans << endl;
}

解答例 (Python)

A = list(map(int,input().split()))
A.sort()
ans = "No"
if A[2]-A[1] == A[1]-A[0]:
  ans = "Yes"
print(ans)

posted:
last update: