Решение задачи №50 «Строки» с ACMP





Решение задачи №50 «Строки» с ACMP

Условие задачи

Циклическим сдвигом строки s называется строка sksk+1sk+2…s|s|s1s2…sk-1 для некоторого k, здесь |s| - длина строки s. Подстрокой строки s называется строка sisi+1…sj-1sj для некоторых i и j. Вам даны две строки a и b. Выведите количество подстрок строки a, являющихся циклическими сдвигами строки b.

Входные данные
Первая строка входного файла INPUT.TXT содержит строку a (1 ≤ |a| ≤ 1000). Во второй строке входного файла записана строка b (1 ≤ |b| ≤ min(100,|a|)). Обе строки состоят только из символов английского алфавита и цифр.

Выходные данные
В выходной файл OUTPUT.TXT выведите целое число – ответ на задачу.

#include<iostream>
#include<stack>
using namespace std;
string cs(string s){
if(s.size())s=(s+s[0]).erase(0,1);
return s;}
int main(){
string t,s,q;
cin>>t>>s;q=s;
int k=0,i=0,j;
do{
do{
auto j=t.find(s,i);
if(j==string::npos)i=0;
else {k++;i=j+1;}
}while(i);
s=cs(s);
}while(s!=q);
cout<<k;
return 0;}



Условия задач взяты с сайта acmp.ru