[CCPC 2024 Shandong I] 左移题解

题目描述

称一个字符串是美丽的,若它的第一个字符和最后一个字符相同。

给定长度为 n 的字符串 S=s0​s1​⋯sn−1​,令 f(S,d) 表示将 S 左移 d 次后获得的字符串。也就是说 f(S,d)=s(d+0)modn​s(d+1)modn​⋯s(d+n−1)modn​。求最小的非负整数 d 满足 f(S,d) 是美丽的。

输入格式

有多组测试数据。第一行输入一个整数 T 表示测试数据组数,对于每组测试数据:

第一行输入一个仅由小写英文字母组成的字符串 s0​s1​⋯sn−1​(1≤n≤5×105)。

保证所有数据 n 之和不超过 5×105。

输出格式

每组数据输出一行一个整数,表示满足 f(S,d) 是美丽的最小非负整数 d。若不存在这样的 d,输出 -1。

输入输出样例

输入 #1复制

4
helloccpc
abcdcba
x
abc

输出 #1复制

3
0
0
-1

说明/提示

对于第一组样例数据,f(S,3)=loccpchel。它的第一个字符和最后一个字符都是 l,所以它是一个美丽字符串。虽然 f(S,6)=cpchelloc 也是美丽的,我们需要回答最小的非负整数 d。所以答案是 3。

思路

直接暴力。

代码见下

#include<bits/stdc++.h>
using namespace std;
long long t,n,sd;
string s;
int main(){
    cin>>t;
    while(t--){
        cin>>s;
        n=s.size();
        if(s[0]==s[n-1]){
            cout<<0<<endl;
        }
        else{
            sd=-1;
            for(int i=1;i<=n-1;i++){
                if(s[i]==s[i-1]){
                    sd=i;
                    break;
                }
            }
            cout<<sd<<endl;
        }
    }
    return 0;
}
posted @ 2025-10-17 19:50  bz02_2023f2  阅读(2)  评论(0)    收藏  举报  来源