[CCPC 2024 Shandong I] 左移题解
题目描述
称一个字符串是美丽的,若它的第一个字符和最后一个字符相同。
给定长度为 n 的字符串 S=s0s1⋯sn−1,令 f(S,d) 表示将 S 左移 d 次后获得的字符串。也就是说 f(S,d)=s(d+0)modns(d+1)modn⋯s(d+n−1)modn。求最小的非负整数 d 满足 f(S,d) 是美丽的。
输入格式
有多组测试数据。第一行输入一个整数 T 表示测试数据组数,对于每组测试数据:
第一行输入一个仅由小写英文字母组成的字符串 s0s1⋯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;
}

浙公网安备 33010602011771号