hdu4731Minimum palindrome 构造

来源:互联网 发布:mallat小波算法原理 编辑:程序博客网 时间:2024/06/05 21:17
//给出n和m//用m个小写字母,构成长度为n的序列//这个序列的最长的回文子串长度要最小,如果存在多个//就输出字典序最小的//对于三个字母以上的很容易发现是"abcabcabc..."//对于一个字母的很明显//对于两个字母的小于等于8的需要特判一下//对于大于8的可以"aababb"一直循环下去,这样的最长回文子串的长度一直是4//然后就是由于需要字典序最小 , 所以需要先输出两个"aa"#include<cstdio>#include<cstring>#include<iostream>#include<string>using namespace std ;const int maxn = 1e5+10 ;string str[10] ;string s ;string ss  ;void init(){    str[1] = "a" ;    str[2] = "ab" ;    str[3] = "aab" ;    str[4] = "aabb" ;    str[5] = "aaaba" ;    str[6] = "aaabab" ;    str[7]=  "aaababb" ;    str[8] = "aaababbb" ;    int len = 0 ;    s = "aa" ;    string tmp = "aababb" ;    while(s.length() < maxn - 6)    s += tmp ;    string tt = "abc" ;    while(ss.length() < maxn - 3)    ss += tt ;}int main(){    int n , m  ;    int t  ;    init() ;    scanf("%d" , &t) ;    int cas = 0 ;    while(t--)    {        scanf("%d%d" , &n , &m) ;        printf("Case #%d: " , ++cas) ;        if(n == 1)        while(m--)        printf("a") ;        else if(n == 2)        {            if(m <= 8)            for(int i = 0;i < m;i++)            cout<<str[m][i] ;            else            for(int i = 0 ; i < m;i++)            cout<<s[i];        }        else          for(int i = 0 ;i < m;i++)          cout<<ss[i];        puts("") ;    }}
0 0