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;
}

猜你喜欢

转载自www.cnblogs.com/VIrtu0s0/p/10628635.html
今日推荐