专栏文章
题解:P14245 [CCPC 2024 Shandong I] 左移
P14245题解参与者 4已保存评论 5
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @minkxbmk
- 此快照首次捕获于
- 2025/12/02 04:06 3 个月前
- 此快照最后确认于
- 2025/12/02 04:06 3 个月前
题目大意
给定长度为 字符串 ,现在 的所有循环同构 中如果存在 与 相同的情况。
循环同构
找 (),将 以前的所有字符移至末尾组成新的字符串 就是 的循环同构。
现在问你:若存在 与 相同的情况,输出最小的 。
否则输出 -1。
思路
每次左移 会被移至最后,也就是说 等于 ,那么左移后就是一个合法字符串。这道题就转变为如果 最开始就合法输出 0,接着从 1 枚举 ,若 等于 就输出并结束枚举,最终若 没有一个循环同构是合法的就输出 -1。
code
CPP#include <bits/stdc++.h>
using namespace std;
template<typename T>inline void read(T&x) {
x = 0;
char c;
int sgin = 1;
do {
c = getchar();
if (c == '-')sgin = -1;
} while (!isdigit(c));
do {
x = x * 10 + c - '0';
c = getchar();
} while (isdigit(c));
x *= sgin;
}
void solve(){
string s;
cin>>s;
if(s[0]==s[s.size()-1]){// 开始合法
puts("0");
return ;
}
for(int i=0;i<s.size()-1;i++){// 枚举所有 i
if(s[i]==s[i+1]){
cout<<i+1<<endl;// 输出并结束
return ;
}
}
puts("-1");//没有一个循环同构合法
return ;
}
int main() {
int t;
read(t);
while(t--)solve();
return 0;
}
相关推荐
评论
共 5 条评论,欢迎与作者交流。
正在加载评论...