問題文の理解が大変かもしれない。
問題概要
英小文字からなる文字列 が与えられる。次の条件を満たす 2 角整数
(
) が存在しるかどうかを判定せよ。
「文字列 を
文字ごとに分割したとき、各分割された文字列の
文字目を連結して得られる文字列が
に一致する」
制約
考えたこと
問題文がややこしいが、次のように解釈できる。
0-indexed で考える。
整数 であって、文字列
の添字 (0 始まり) が
で割って
余る部分の文字を連結したときに、
になるものが存在するかを判定せよ。
全体を通して、次のように探索すればよい。
bool res = false; for (int w = 1; w <= S.size(); ++w) { for (int c = 0; c < w; ++c) { string U = (S のうち、添字が w で割って c 余る文字を連結したもの); if (U == T) res = true; } }
コード
#include <bits/stdc++.h> using namespace std; int main() { string S, T; cin >> S >> T; bool res = false; for (int w = 1; w < S.size(); ++w) { for (int c = 0; c < w; ++c) { string U = ""; for (int k = c; k < S.size(); k += w) { U += S[k]; } if (U == T) res = true; } } cout << (res ? "Yes" : "No") << endl; }