zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    python 之Twsited
    python之 rabbitmq
    python 之redis
    异常处理
    python select
    线程与进程
    初识socket
    Position属性
    Http协议理解
    BFC(块级格式化上下文)
  • 原文地址:https://www.cnblogs.com/VIrtu0s0/p/10628635.html
Copyright © 2011-2022 走看看