题解:P11579 [CCC2020] Cyclic Shifts

· · 题解

题目链接

P11579 [CCC2020] Cyclic Shifts

思路

注意看,数据范围写着 1 \le |S|,|T| \le 100

那么 |S|,|T| 是什么呢?

注意到,ST 都是字符串,指的是其长度。

范围如此小,考虑打表!

好吧,这题打不了表。

那么我们就暴力加模拟。

  1. s 的第一位放至末尾。
  2. t 中找有没有移位后的 s,有则输出 yes 并且结束程序。
  3. 如果没有,循环结束后输出 no

注意字符串 s 要找个替身来记录。

这里教你们两个字符串函数:

  1. substr 函数:用于截取子字符串。本例中用于提取 s 截取第一位后的字符串。
  2. find 函数:寻找字符串。本例中用于在 t 中找有没有移位后的 s

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string t,s;
    cin>>t>>s;
    string ss=s;//找替身
    for(int i=0;i<s.size();i++)
    {
        string hc;
        hc+=ss[0];
        ss=ss.substr(1); 
        ss=ss+hc;
        //模拟组建过程
        if(t.find(ss)!=-1)
        {
            cout<<"yes";
            return 0; 
        }//判断
    }
    cout<<"no";
    return 0;
}