HDU 4731 Minimum Palindrome

来源:互联网 发布:头条号视频剪辑软件 编辑:程序博客网 时间:2024/06/05 21:08
hdu 4731 Minimum palindrome
题意:前n个字母形成一个m长的字符串,要求如下:
1、最长回文串最小
2、字典序最小
思路:
1.n=1, aaaa……
2.n=2,打表找规律


1 a
2 ab
3 aab
4 aabb
5 aaaba
6 aaabab
7 aaababb
8 aaababbb
9 aaaababba
10 aaaababbaa
11 aaaababbaaa
12 aaaababbaaaa
13 aaaababbaabab
14 aaaababbaababb
15 aaaababbaababba
16 aaaababbaababbaa
17 aaaababbaababbaaa
18 aaaababbaababbaaaa
19 aaaababbaababbaabab
20 aaaababbaababbaababb


3.n>=3,abcabc…… 不存在回文且字典序最小
#include <cstring>#include <cstdio>#include <iostream>using namespace std;/*int len;string ans;int cal( string str){    int length = str.length();    int tmp = 0;    for(int i = 0; i < length; i ++ ){        for(int j = length - 1; j >= i; j--){            int tmp_i = i;            int tmp_j = j;            while(tmp_i <= tmp_j && str[tmp_i] == str[tmp_j]){                tmp_i ++;                tmp_j --;            }            if(tmp_i > tmp_j){                int tt = j - i + 1;                tmp = ( tt > tmp ) ? tt : tmp;            }        }    }    return tmp;}                    void getString( int level, int total, string str){    if(level == total ){        int tmp = cal(str);            if( (tmp < len) || (tmp == len && str < ans) ){            len = tmp;            ans = str;        }    }    else{        getString( level + 1, total, str + "a" );        getString( level + 1, total, str + "b" );    }}                void dabiao(){    for(int i = 1;i <= 20; i ++){         len = i;         ans = "";         for(int j = 0; j < i; j++){             ans += 'b';         }         getString(0,i,"");         cout << i << " " << ans << endl;      } }*/int n,m,t;             int main(){    //dabiao();    scanf("%d",&t);    for(int i = 1; i <= t; i++){        scanf("%d%d",&m,&n);        printf( "Case #%d: ", i );        if( m == 1 ){            for(int j = 0; j < n; j ++){                printf( "a" );            }            printf("\n");        }        else if( m >= 3 ){            for(int j = 0; j < n / 3; j ++){                printf( "abc" );            }            if( n % 3 == 1 ){                printf("a\n");            }            else if( n % 3 == 2 ){                printf("ab\n");            }            else printf("\n");        }        else if( m == 2 ) {            if(  n == 1 ) printf( "a\n" );            else if( n == 2 ) printf( "ab\n");            else if( n == 3 ) printf("aab\n");            else if( n == 4 ) printf("aabb\n");            else if( n == 5 ) printf("aaaba\n");            else if( n == 6 ) printf("aaabab\n");            else if( n == 7 ) printf("aaababb\n");            else if( n == 8 ) printf("aaababbb\n");            else{                printf("aaaa");                n -= 4;                for( int j = 0; j < n / 6 ; j ++ ){                    printf("babbaa");                }                if(n % 6 == 1 ) printf("a\n");                else if( n % 6 == 2 ) printf("aa\n");                else if( n % 6 == 3 ) printf("bab\n");                else if( n % 6 == 4 ) printf("babb\n");                else if( n % 6 == 5 ) printf("babba\n");                else printf("\n");            }              }    }                                     //system( "pause" );        return 0;}    


0 0