2020 Multi-University Training Contest 1-1004 Distinct Sub-palindromes
阿新 • • 發佈:2020-07-25
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; #definegc 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; }