当前位置 博文首页 > 文章内容

    2020 Multi-University Training Contest 1-1004 Distinct Sub-palindromes

    作者: 栏目:未分类 时间:2020-07-25 14:00:57

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    http://acm.hdu.edu.cn/showproblem.php?pid=6754

     

     题意:

      字符串由小写字母构成

      求 长度为N的 回文子串数量最少的 字符串的个数

    思路:

      长度为1的串 回文子串最少1个  形式:a

      长度为2的串 回文子串最少2个  形式:aa / ab

      长度为3的串 回文子串最少3个  形式:aaa / aab aba abb / abc

      经试验,

      长度为4的串 回文子串最少1个  形式:abca

      猜想,长度>3的串 最少可以只有3个回文子串(abcabc... 其中只构成 a b c 3个回文串

      证明:添加字母会增加新的子串d使得回文子串数目>=4,减少到两个或者一个字母会不足以维持只有3个回文子串,3个字母保证3种回文子串只有一种排列

    编码:

      分为长度 1、2、3、>3,分别输出结果

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<bitset>
    #include<cassert>
    #include<cctype>
    #include<cmath>
    #include<cstdlib>
    #include<ctime>
    #include<deque>
    #include<iomanip>
    #include<list>
    #include<map>
    #include<queue>
    #include<set>
    #include<stack>
    #include<vector>
    #include <vector>
    #include <iterator>
    #include <utility>
    #include <sstream>
    #include <limits>
    #include <numeric>
    #include <functional>
    using namespace std;
    #define gc getchar()
    #define mem(a) memset(a,0,sizeof(a))
    //#define sort(a,n,int) sort(a,a+n,less<int>())
    
    #define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    
    long long Mode(long long a, long long b, long long mode)
    {
        long long sum = 1;
        while (b) {
            if (b & 1) {
                sum = (sum * a) % mode;
                b--;
            }
            b /= 2;
            a = a * a % mode;
        }
        return sum;
    }
    
    int main()
    {
        int T = 0;
        long long n = 0;
        cin >> T;
        while(T--)
        {
            cin >> n;
            if(n == 1)
            {
                cout << 26 << endl;
                continue;
            }
            else if(n == 2)
            {
                cout << 26 + 26*25 << endl;
                continue;
            }
            else if(n == 3)
            {
                cout << 26 + 26*25*3 +26*25*24 << endl;
                continue;
            }
            else
            {
                cout << 26*25*24 << endl;
                continue;
            }
        }
        return 0;
    }