AtCoder が提供しているABC(AtCoder Beginner Contest)369 A問題をC++とPythonで解いてみました。ABC369は、2024年8月31日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
A問題 369(Difficulty : 28)
問題の詳細は、リンク先をご覧ください。
入力例を分析します。AtCoder Problems による Difficulty は 28 でした。
解答案
入力例を分析してみます。
- 入力例1:5, 7 の場合、3→5→7、5→7→9と左右に加える場合と5→6→7と中間に入れる場合があり、3通りとなります。
- 入力例2:6, 1 の場合、11→6→1、6→1→-4と左右に加える場合があります。6と1の真ん中は、3.5と整数にならないため、中間にある場合がなく2通りとなります。
- 入力例3:3, 3 の場合、どこにいれても、3→3→3 と数列が決まります。1通りとなります。
入力例から以下が分かります。
- $A$と$B$が等しければ、1通りとなる。
- $A$と$B$が異なる場合、
- $(A+B)/2$ が整数の場合、3通りとなる。
- $(A+B)/2$ が整数とならない場合、2通りとなる。
C++ プログラム例(ABC369A)
上記の考察をプログラムにしました。以下が、C++プログラムです。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
int result = 0;
if (a == b) {
result = 1;
} else if (abs(a - b) % 2 != 0) {
result = 2;
} else {
result = 3;
}
cout << result << endl;
return 0;
}
AC(Accepted=正しいプログラム)と判定されました。
Python プログラム例(ABC369A)
Python版も基本的な考え方は同じです。以下がプログラムです。
"""AtCoder Beginner Contest 369 A"""
a, b = map(int, input().split())
result = 0
if a == b:
result = 1
elif abs(a - b) % 2 != 0:
result = 2
else:
result = 3
print(result)
こちらも「AC」と判定されました。
最後に
この問題は、A問題としては難しく感じました。すべてのケースについて、入力例で紹介されていて助かりました。
引き続き ABC の問題を紹介していきます。