実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 78
問題概要
英小文字からなる文字列 が与えられる。次の条件を満たす
となる整数の組
が存在するかを判定せよ。ここで、
は
の長さを表す。
- 条件 :
を先頭から
文字ごとに区切ったとき、長さが
以上の文字列の
番目の文字を順番に連結した文字列が
と一致する。
制約
考察
ともに
以下なので、2重ループを用いて条件の通りに全探索してしまおう。
実装のポイントとして、「 文字ごとに区切る」という操作と「区切った文字列の
番目を連結する」という操作の2つを同時に行うため、
について 「
文字目から始めて
文字目を順に取り出していく」という方針を取っている。
コード
#include <bits/stdc++.h> using namespace std; #define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++) // ======================================== // int main() { string S, T; cin >> S >> T; rep(w, 0, S.size()) rep(c, 0, w) { string temp = ""; for (int i = c; i < S.size(); i += w) { temp += S[i]; } if (temp == T) { cout << "Yes" << endl; return 0; } } cout << "No" << endl; return 0; }
実装時間: 5分