P14245 [CCPC 2024 Shandong I] 左移题解
题目分析
其实这道题就是给我们一个字符串 sss,每次把 sss 的第一位挪动到 sss 的最后一位,如果在有限的步数之内可以实现 sss 的第一位等于最后一位的时候,那么输出这个步数;但是如果我们永远都不可能达到的话,输出 -1\texttt{-1}-1。
思路分析
首先这道题就是先看看整体是不是一个现成的例子,是就可以直接输出了。
然后如果移动后首尾相等的话,那么移动的这个字符和它后面面这个字符一定是相等的。既然如此,就可以遍历一下这个字符串,找 iii(1≤i≤N1 \le i \le N1≤i≤N),如果 sis_isi 等于 si−1s_{i-1}si−1,那么就输出 iii 即可。
最后,如果上面的都没有实现,就输出 -1\texttt{-1}-1。
代码
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
string a;
void solve(){cin>>a;int n=a.size();bool flag=false;if(a[0]==a[n-1]){//看看是不是首先就是一个现成的例子cout<<0<<endl;}else{for(int i=0;i<n;i++){if(a[i]==a[i-1]){//相等cout<<i<<endl;flag=true;return ;}}if(flag==false) cout<<-1<<endl;//怎么都不可以实现}
}
signed main (){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);int T;cin>>T;while (T--){solve();}return 0;
}