AtCoder が提供しているABC(AtCoder Beginner Contest)381 B問題をC++とPythonで解いてみました。ABC381は、2024年11月22日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
B問題 1122 String(Difficulty : 52)
問題の詳細は、リンク先をご覧ください。
「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 の問題を紹介していきます。