AtCoder が提供しているABC(AtCoder Beginner Contest)360 B問題をC++とPythonで解いてみました。ABC360は、2024年6月30日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
B問題 A Vertical Reading(Difficulty : 78)
問題の詳細は、リンク先をご覧ください。
問題文の記載に従い全探索します。AtCoder Problems による Difficulty は 78 でした。
解答案
C++ プログラム例(ABC360B)
問題文にあるように $1 \leqq w < |S|$ に対して、$0 \leqq c < w$ とします($c$ は、0からカウントするため1を減らして考えています)
上記の範囲で、$c$ 番目の文字を先頭に $w$ 文字毎に文字を加えて、文字列 $T$ になるか確認しています。以下が、C++プログラムです。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s, t;
cin >> s >> t;
bool result = false;
int s_len = s.length();
for (int w = 1; w < s_len; ++w) {
for (int c = 0; c < w; ++c) {
string temp = "";
int index = c;
while (index < s_len) {
temp += s[index];
index += w;
}
if (temp == t) {
result = true;
}
}
}
if (result) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
AC(Accepted=正しいプログラム)と判定されました。
Python プログラム例(ABC360B)
Python版も基本的な考え方は同じです。以下がプログラムです。
"""AtCoder Beginner Contest 360 B"""
s, t = input().split()
result = False
s_len = len(s)
for w in range(1, s_len):
for c in range(w):
temp = ""
index = c
while index < s_len:
temp += s[index]
index += w
if temp == t:
result = True
print("Yes" if result else "No")
こちらも「AC」と判定されました。
最後に
この問題は、制約違反の入力データがテストデータに含まれており、一部ACとなるプログラムがWA判定になったようです。このため、レーティング更新が遅れています。
https://atcoder.jp/contests/abc360/clarifications
引き続き ABC の問題を紹介していきます。