Задача
Вася недавно узнал, что такое циклическое k-расширение строки S. Его можно получить следующим образом: склеить k экземпляров строки S, а потом взять первые k символов результата.
Узнав это, Вася обрадовался, взял некоторую строку, и начал к ней применять описанную операцию, не запоминая, какое он каждый раз брал k.
Вам дана часть строки, получившейся у Васи. Ваша задача определить, не ошибся ли Вася в своих сложных преобразованиях, т. е., мог ли у него из первоначальной строки получиться ответ, содержащий данную строку в качестве подстроки.
Входные данные
В первой строке входного файла INPUT.TXT находится изначальная строка, которую Вася бережно записал перед тем, как приступить к своим действиям. Во второй строке находится подстрока результата, полученного Васей. Обе строки не пусты и по длине не превышают 5 000 символов. Строки могут состоять из больших и маленьких английских букв (с учетом регистра), а также цифр.
Выходные данные
В выходной файл OUTPUT.TXT выведите "NO", если можно точно сказать, что Вася ошибся, и "YES", если мог и не ошибиться.
Примеры
1) Вход:
abc
abc
Выход:
YES
2) Вход:
abcd
bcabc
Выход:
YES
3) Вход:
abcabc
abcA
Выход:
NO
Идея
Я подумал, что задача заключается в том, чтобы проверить, есть ли в первой и второй строках одинаковые значения, но, видимо, неправильно.
#include <iostream>
#include <string>
int main()
{
std::string str;
std::string substring;
std::cin >> str;
std::cin >> substring;
bool check = false;
int i = 0;
while (!check && i < substring.length())
{
if (str.find(substring[i]) == std::string::npos)
{
check = true;
}
i++;
}
if (check)
{
std::cout << "NO";
}
else
{
std::cout << "YES";
}
}