hdu 4731 Minimum palindrome 找规律 (2013 ACM/ICPC Asia Regional Chengdu Online 1004)

转自:http://blog.csdn.net/a601025382s/article/details/11688305

#include <cstdio>  
#include <string>  
#include <cmath>  
#include <iostream>  
#include <algorithm>  
using namespace std;  
#define LL __int64  
int main()  
{  
    int T,tt=0;  
    cin>>T;  
    while(T--)  
    {  
        int i,j,k,n,m;  
        cin>>m>>n;  
        cout<<"Case #"<<++tt<<": ";  
        if(m==1){  
            for(i=0;i<n;i++)  
            cout<<"a";  
            cout<<endl;  
        }  
        else if(m>2)  
        {  
            for(i=0;i<n/3;i++)  
            cout<<"abc";  
            if(n%3==1)cout<<"a"<<endl;  
            else if(n%3==2)cout<<"ab"<<endl;  
            else cout<<endl;  
        }  
        else  
        {  
            if(n<=4)  
            {  
                for(i=0;i<(n+1)/2;i++)  
                cout<<"a";  
                for(i=0;i<n/2;i++)  
                cout<<"b";  
                cout<<endl;  
            }  
            else if(n==5)cout<<"aaaba"<<endl;  
            else if(n==6)cout<<"aaabab"<<endl;  
            else if(n==7)cout<<"aaababb"<<endl;  
            else if(n==8)cout<<"aaababbb"<<endl;  
            else  
            {  
                cout<<"aa";  
                n=n-2;  
                for(i=0;i<n/6;i++)  
                cout<<"aababb";  
                if(n%6==1)cout<<"a"<<endl;  
                else if(n%6==2)cout<<"aa"<<endl;  
                else if(n%6==3) cout<<"aaa"<<endl;  
                else if(n%6==4) cout<<"aaaa"<<endl;  
                else if(n%6==5) cout<<"aabab"<<endl;  
                else cout<<endl;  
            }  
        }  
    }  
    return 0;  
}  
/* 
    题意,用前m个字母,组成长度为n的字符串,使得子串中回文数最小 
    当m=1时,必定全是a。 
    当m>2时,必定全是abc循环,因为要构成回文,回文中左右端点相同,且第二级相同。举例证明: 
a的右边必定是b,a的左边必定是c。所以含a的必定不能成回文。而不含a的只有bc,所以abc循环回文数最小。 
    当m=2时,思考用上述m>2的循环来接。当只有a,b两个字母。所以要两个字母组合,有aa,bb,ab,ba 
任意取三个判断下,回文数最小,字典序最小。可以发现aababb循环的回文数最小,为4.当n<=8时需要特判, 
因为n<=8时,最小回文数小于4.当n>=9时,开头添加aa不会增大回文数,且使字典序最小。删去aa后,接着就是 
aababb循环了。 
    注意的是,aababb循环有剩余的时候,还需要特判。因为剩余的数不会有右边的数影响,可以用更小的字典序。  
*/  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值