AtCoder が提供しているABC(AtCoder Beginner Contest)322 のA問題をC++とPythonで解いてみました。ABC322は、2023年9月30日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
A問題 First ABC 2(Difficulty : 12)
問題はリンク先をご覧ください。
特定の文字列を探す問題です。AtCoder Problems による Difficulty は 12 でした。
解答案
C++ プログラム例(ABC322A)
3文字を走査して “ABC” と一致するか確認します(13行目)。配列の添え字は0からカウントして、問題の文字数は1からカウントするため、1を加えて解答しています(14行目)。また、先頭の場所を解答するため、見つけた時点でループを抜けます(15行目)。
以下が、C++プログラムとなります。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
string s;
cin >> s;
int result = -1;
for (int i = 0; i < n - 2; ++i) {
if ((s[i] == 'A')&&(s[i + 1] == 'B')&&(s[i + 2] == 'C')) {
result = i + 1;
break;
}
}
cout << result << endl;
return 0;
}
AC(Accepted=正しいプログラム)と判定されました。
Python プログラム例(ABC322A)
Python 版も基本的な考え方は同じです。以下となります。
"""AtCoder Beginner Contest 322 A"""
n = int(input())
s = input()
result = -1
for i in range(n - 2):
if s[i] == 'A' and s[i + 1] == 'B' and s[i + 2] == 'C':
result = i + 1
break
print(result)
3文字を取り出すためにスライス記法も使えます(7行目)。
"""AtCoder Beginner Contest 322 A"""
n = int(input())
s = input()
result = -1
for i in range(n - 2):
if s[i:i + 3] == "ABC":
result = i + 1
break
print(result)
どちらも「AC」と判定されました。
最後に
ABC321は、不正者が多くいたようです。今回、その影響について、以下のように運営から連絡がありました。
【お知らせ】前回のABCのレーティングの再計算がされていませんが、後日ロールバックして再計算を行います。本日のABCについてはこのまま計算を行います。
https://twitter.com/atcoder/status/1708082146135756851
再計算によって上がるか下がるかも想像できませんが、結果を待ちたいと思います。
引き続き ABC の問題を紹介していきます。