AtCoder

ABC360 B問題(Vertical Reading)を解く

AtCoder_ABC360_B

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

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

B問題 A Vertical Reading(Difficulty : 78)

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

ABC360 B問題 Vertical Reading

問題文の記載に従い全探索します。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 の問題を紹介していきます。

COMMENT

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

CAPTCHA