• 2013 成都网络赛 1004 Minimum palindrome


    题目大意:用m个字母组成一个长度为N的字符串,使得最长的回文子串 的长度最小。 并且要求字典序最小。

    思路:分类模拟。

    当M为1 的时候就直接输出N个A

    当M大于2的时候就循环ABC

    当M等于2的时候

    先枚举出当N<9 的情况,因为此时可以用最长串长度为 3 的基础上得到。

    而当N>9的时候。

    其实就是 aababb 为循环节的一个循环。但是此时是建立在最长串为4的基础上得到

    但是有另外的情况就是

    m==2 n%6<=4的时候最后面就不是循环循环节了。

    例如:

    m=2 n=10

    aababbaaaa.

    而不是

    aababbaaba.

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <string>
    #include <vector>
    #include <map>
    #include <set>
    
    using namespace std;
    
    
    #ifdef WIN
    typedef __int64 LL;
    #define iform "%I64d"
    #define oform "%I64d
    "
    #else
    typedef long long LL;
    #define iform "%lld"
    #define oform "%lld
    "
    #endif
    
    const double eps = 10e-9;
    #define SI(a) scanf("%d", &(a))
    #define SDI(a, b) scanf("%d%d", &(a), &(b))
    #define SUI(a) scanf("%ud", &(a))
    #define S64I(a) scanf(iform, &(a))
    #define SS(a) scanf("%s", (a))
    #define SC(a) scanf("%c", &(a))
    #define PI(a) printf("%d
    ", a)
    #define P64I(a) printf(oform, a)
    #define Max(a, b) (a > b ? a : b)
    #define Min(a, b) (a < b ? a : b)
    #define MSET(a, b) (memset(a, b, sizeof(a)))
    #define Mid(L, R) (L + (R - L)/2)
    #define ABS(a) (a > 0 ? a : -a)
    #define REP(i, n) for(int i=0; i < (n); i++) 
    #define FOR(i, a, n) for(int i=(a); i <= (n); i++)
    typedef unsigned int UINT;
    
    const char tab[8][20] = {
        "a", "ab", "aab", "aabb", "aaaba", "aaabab", "aaababb", "aaababbb"};
    
    int main() {
        int T;
    
        SI(T);
        FOR(kase, 1, T) {
            int m, n;
            SDI(m, n);
    
            printf("Case #%d: ", kase);
    
            if(m>2) {
                //int tn = n - m + 3;
                int a = n / 3;
                int b = n % 3;
                REP(i, a) printf("abc");
                REP(i, b) printf("%c", 'a'+i);
                //REP(i, m-3) printf("%c", 'd'+i);
                printf("
    ");
            } else if(m == 1) {
                REP(i, n) putchar('a');
                printf("
    ");
            } else {
                if(n < 9) {
                    printf("%s
    ", tab[n-1]);
                } else {
                    char t[] = "babbaa";
                    printf("aaaa");
                    int a = (n-4) / 6;
                    int b = (n-4) % 6;
                    REP(i, a) printf("babbaa");
                    if(b <= 2) REP(i, b) putchar('a');
                    else REP(i, b) putchar(t[i]);
                    printf("
    ");
                }
            }
        }
    
        return 0;
    }


  • 相关阅读:
    第八周作业
    第八周上机练习
    第七周作业
    第七次上机练习
    第六周作业
    4.9上机作业
    第五周作业
    第四次JAVA作业
    第四周作业
    第十六次作业
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3323008.html
Copyright © 2020-2023  润新知