AtCoder

ABC381 B問題(1122 String)を解く

AtCoder_ABC381_B

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

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

B問題 1122 String(Difficulty : 52)

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

ABC381 B問題 1122 String

「1122文字列」の定義に従い判定を行います。AtCoder Problems による Difficulty は 52 でした。

解答案

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

文字列の定義に基づき、以下の条件を判定します。

  • 文字列の長さが偶数か?
  • 偶数番目文字とその次の文字が同じか?ただし、文字の位置は0からカウントします。
  • その文字は、まだ出現していないか?

すべての条件を満たす場合は “Yes”、満たさない場合は “No” を出力します。以下が、C++プログラムです。

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

int main()
{
	string s;
	cin >> s;
	int n;
	n = (int)s.length();

	bool result = true;
	if (n % 2 != 0) {
		result = false;
	} else {
		set<char> c;
		for (int i = 0; i < n; i += 2) {
			if (s[i] != s[i + 1]) {
				result = false;
			}
			if (c.find(s[i]) != c.end()) {
				result = false;
			}
			c.insert(s[i]);
		}
	}

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

	return 0;
}

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

Python プログラム例(ABC381B)

Python版も基本的な考え方は同じです。以下がプログラムです。

"""AtCoder Beginner Contest 381 B"""
s = input()
n = len(s)

result = True
if n % 2 != 0:
    result = False
else:
    c = set()
    for i in range(0, n, 2):
        if s[i] != s[i + 1]:
            result = False
        if s[i] in c:
            result = False
        c.add(s[i])

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

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

最後に

今回のコンテストは、11/22文字列や1122文字列に関連する問題がF問題まで出題されました。それぞれの問題の難易度も適度に上昇しており、セットとして上手くできていると感じました。

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

COMMENT

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

CAPTCHA