专栏文章

题解:P14245 [CCPC 2024 Shandong I] 左移

P14245题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minkupcx
此快照首次捕获于
2025/12/02 04:03
3 个月前
此快照最后确认于
2025/12/02 04:03
3 个月前
查看原文

思路

题目要求令f(S,d)f(S,d)表示将字符串SS向左移动dd次后的结果,一个美丽的f(S,d)f(S,d)需要保证首尾相同;
所以在移动第dd次的时候,此时SdS _ d移动到了字符串末尾Sd+1S _ {d+1}移动到了字符串首位,所以只需要遍历字符串SS,每次比较SdS _ dSd+1S _ {d+1}的值是否相等即可;
相等的话直接输出此次循环的次数,最后结束循环。

code

CPP
//头文件省略

int t;
int main(){
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
	cin>>t;
	for(int n=1;n<=t;n++){
		string s;
		cin>>s;
		int len=s.size();
		int m=s[len-1];
		if(s[0]==m || len==1){
			cout<<0<<endl;
			continue;
		}else{
			bool cnt=false;
			for(int i=0;i<len;i++){
				if(s[i]==s[i+1]){
					cnt=true;
					cout<<i+1<<endl;
					break;
				}
			}
			if(!cnt) cout<<-1<<endl;
		}
	}
	return 0;
}
  • 注:在循环遍历前增加特判加快效率,特判不用移动就能保证首位相同或字符串长度为1的情况。

评论

0 条评论,欢迎与作者交流。

正在加载评论...