AtCoder

ABC355 B問題(Piano 2)を解く

AtCoder_ABC355_B

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

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

B問題 Piano 2(Difficulty : 105)

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

ABC355 B問題 Piano 2

問題文の指示に従い判断します。AtCoder Problems による Difficulty は 105 でした。

解答案

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

プログラムを補足します。

  • 数列Aを読み込みます。数列Aに含まれている要素は set コンテナ in_A にも格納します(10ー15行目)。
  • 数列Aに数列Bの要素を追加します。追加後にソートします(16ー21行目)。
  • in_A に含まれている要素が2つ連続しているか調べます(23ー28行目)。

以下が、C++プログラムです。

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

int main()
{
	int n, m;
	cin >> n >> m;
	vector<int> a;
	set<int> in_A;
	for (int i = 0; i < n; ++i) {
		int t;
		cin >> t;
		a.push_back(t);
		in_A.insert(t);
	}
	for (int i = 0; i < m; ++i) {
		int t;
		cin >> t;
		a.push_back(t);
	}
	sort(a.begin(), a.end());

	bool result = false;
	for (int i = 0; i < n + m - 1; ++i) {
		if ((in_A.find(a[i]) != in_A.end())&&(in_A.find(a[i + 1]) != in_A.end())) {
			result = true;
		}
	}

	if (result) {
		cout << "Yes" << endl;
	} else {
		cout << "No" << endl;
	}

	return 0;
}

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

Python プログラム例(ABC355B)

基本的な考え方は同じです。Pythonは表現力が豊かで、全体がすっきりと書けています。以下がプログラムです。

"""AtCoder Beginner Contest 355 B"""
n, m = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
in_A = set(a)
a = a + b
a.sort()

result = False
for i in range(n + m - 1):
    if a[i] in in_A and a[i + 1] in in_A:
        result = True

print("Yes" if result else "No")

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

最後に

問題名は、ピアノの鍵盤をイメージしたと思われます。鍵盤は、白鍵と黒鍵があり白鍵が2個続いているところがあります(ミとファ)。

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

COMMENT

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

CAPTCHA