字符串——cf1109B

/*
先判不可行的情况:n/2的是单一字符 
 
判只切割一次能不能组成回文
枚举每个切割点,交换两个串的位置 

剩下就是割两次 
*/
#include<bits/stdc++.h>
#include<vector>
using namespace std;
#define maxn 5005
char s[maxn];
int n;

int judge(int pos){
    vector<char>v;
    v.clear();
    for(int i=pos+1;i<=n;i++)
        v.push_back(s[i]);
    for(int i=1;i<=pos;i++)
        v.push_back(s[i]);
    
    int flag=0;//判是否和原串一样 
    for(int i=0;i<n;i++)
        if(s[i+1]!=v[i])flag=1;
    if(!flag)return 0;
    
    int i=0,j=n-1;
    while(i<j){
        if(v[i]!=v[j])return 0;
        i++,j--;
    } 
    return 1;
}

int main(){
    cin>>s+1;n=strlen(s+1);
    int flag=0;
    for(int i=2;i<=n/2;i++)
        if(s[i]!=s[1])flag=1;
    if(!flag){
        puts("Impossible");
        return 0;
    }    
    
    for(int i=1;i<=n-1;i++){
        if(judge(i)){
            cout<<1<<endl;
            return 0;
        }
    }
    
    cout<<2<<endl; 
} 
原文地址:https://www.cnblogs.com/zsben991126/p/10907437.html