Codeforces Round #539 (Div. 2) D 思维
https://codeforces.com/contest/1113/problem/D
题意
将一个回文串切成一段一段,重新拼接,组成一个新的回文串,问最少切几刀
题解
- 首先无论奇偶串,最多只会切两刀
- 然后对于偶数串,看看有没有循环回文串,有的话只需要切一刀
代码
#include<bits/stdc++.h>
using namespace std;
int n,m,i,j,ok,ans;
string s;
int main(){
cin>>s;n=s.size();
if(n%2)m=n/2+1;
else m=n/2;
ans=0;
for(i=2;i<=n/2;i++){
ok=1;
for(j=1;j<=i;j++){
if(s[j-1]!=s[n-i+j-1]){ok=0;break;}
}
if(!ok){
ans=2;
break;
}
}
if(!ans){
cout<<"Impossible"<<endl;
return 0;
}
s=s+s;
for(i=1;i<n;i++){
ok=1;
for(j=0;j<n;j++){
if(s[j]!=s[i+j]){ok=0;break;}
}
if(ok)continue;
ok=1;
for(j=0;j<n/2;j++){
if(s[i+j]!=s[n-1-j+i]){ok=0;break;}
}
if(ok){cout<<1<<endl;return 0;}
}
cout<<ans<<endl;
}