VIrtuoso

两把多兰剑加个布甲鞋

导航

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

posted on 2019-03-30 19:34  VIrtuoso  阅读(114)  评论(0编辑  收藏  举报