AtCoder が提供しているABC(AtCoder Beginner Contest)349 のC問題をC++とPythonで解いてみました。ABC349は、2024年4月13日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
C問題 Airport Code(Difficulty : 219)
問題はリンク先をご覧ください。
貪欲法で解くことができます。AtCoder Problems による Difficulty は 219 でした。
解答案
文字列Tの何文字目まで出現しているか走査します。文字列Sを大文字に変換して、’X’ を加えておくと処理が楽になります。
C++ プログラム例(ABC349C)
上で述べたように文字列Sを大文字に変換して、’X’ を加えることにより、同じロジックで走査できます。文字列Sの先頭から、文字列Tが何文字まで現れるか変数 index で管理します。index が 3 に一致していれば条件を満たします。
以下が、C++プログラムとなります。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s, t;
cin >> s >> t;
for (int i = 0; i < s.length(); ++i) {
s[i] = toupper(s[i]);
}
s += 'X';
int index = 0;
for (int i = 0; i < s.length(); ++i) {
if (s[i] == t[index]) {
++index;
if (index == 3) {
break;
}
}
}
if (index == 3) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
AC(Accepted=正しいプログラム)と判定されました。
Python プログラム例(ABC349C)
Python 版も基本的な考え方は同じです。以下となります。
"""AtCoder Beginner Contest 349 C"""
s = input().upper() + 'X'
t = input()
index = 0
for ch in s:
if ch == t[index]:
index += 1
if index == 3:
break
print("Yes" if index == 3 else "No")
こちらも「AC」と判定されました。
最後に
文字列Sを大文字に変換して、’X’ を加えることにより、全体をすっきりと書くことができました。
引き続き ABC の問題を紹介していきます。