AtCoder

ABC369 A問題(369)を解く

AtCoder_ABC369_A

AtCoder が提供しているABC(AtCoder Beginner Contest)369 A問題をC++とPythonで解いてみました。ABC369は、2024年8月31日21:00に実施されました。

AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。

A問題 369(Difficulty : 28)

問題の詳細は、リンク先をご覧ください。

ABC369 A問題 369

入力例を分析します。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 の問題を紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA