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


    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;
    }

    作者:YukiRinLL

    出处:YukiRinLL的博客--https://www.cnblogs.com/SutsuharaYuki/

    您的支持是对博主最大的鼓励,感谢您的认真阅读。

    本文版权归作者所有,欢迎转载,但请保留该声明。

  • 相关阅读:
    ListView控件学习系列2编辑ListView(Edit,Update,Insert,Delete)
    程序员如何营销自己?(转贴)
    ListView使用技巧
    ListView控件学习系列1了解ListView控件
    LINQ To SQL深入学习系列之四(LINQ查询基础)
    单元测试基础知识(转)
    微软vs2008快捷键
    ListView控件学习系列3ListView选择,排序,分页
    反射学习系列1反射入门
    一道笔试题的解法和联想
  • 原文地址:https://www.cnblogs.com/SutsuharaYuki/p/13376489.html
Copyright © 2020-2023  润新知