AtCoder

ABC285 A問題(Edge Checker 2)を解く

AtCoder_ABC285_A

AtCoder が提供しているABC(AtCoder Beginner Contest)285 のA問題をC++とPythonで解いてみました。ABC285は、2023年1月15日21:00に実施されました。

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

A問題 Edge Checker 2(Difficulty : 11)

問題はリンク先をご覧ください。

ABC285 A問題 Edge Checker 2

グラフの形を与えられて、条件を満たすか判定する問題です。AtCoder Problems による Difficulty は、11 でした。

解答案

問題を解く方針が2つあります。

  • 直接結ばれている関係をすべて書き出し、確認する。
  • 法則を見つけて、確認する。

Python プログラム例(ABC285A)

いつもとは異なり Python のプログラムを先に紹介します。直接結ばれている関係をタプルのリストとして表現して、そこに含まれているか判定しています。

"""AtCoder Beginner Contest 285 A"""
a, b = map(int, input().split())
if (a, b) in [(1, 2), (1, 3), (2, 4), (2, 5), (3, 6), (3, 7),
              (4, 8), (4, 9), (5, 10), (5, 11),
              (6, 12), (6, 13), (7, 14), (7, 15)]:
    print("Yes")
else:
    print("No")

タプルが14個あるため、行が長くなりました。Python のコーディングガイドラインPEP 8が推奨する79文字を超えるため折り返しました。リストの場合、行の連結は不要なようです(行連結をするために、\ を行末につけると、flake8 は警告を出力しました)。

次に法則を使うバージョンです。グラフの親と子の関係をみると、子の値を2で割って切り捨てた値が親になっていることが分かります。これを素朴にプログラムしました。

"""AtCoder Beginner Contest 285 A"""
a, b = map(int, input().split())
print("Yes" if b // 2 == a else "No")

どちらも AC(Accepted=正しいプログラム)と判定されました。

C++ プログラム例(ABC285A)

C++ では、法則を使うバージョンだけ紹介します。以下となります。

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

int main()
{
	int a, b;
	cin >> a >> b;

	if (b / 2 == a) {
		cout << "Yes" << endl;
	} else {
		cout << "No" << endl;
	}

	return 0;
}

こちらも「AC」と判定されました。

最後に

このような簡単に見える問題でも解く方針は2つあります。それぞれのメリットがあるため、適宜使い分けていくことが良いと考えています。

引き続き ABC の問題を紹介していきます。

COMMENT

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

CAPTCHA