题目:HDU6754
题意:
S是长度为n的字符串。 S由小写英文字母组成。
您的任务是计算具有最少亚种回文数的不同S的数目。 亚种回文是回文的子字符串。
如果两个子回文式u和v的长度不同或对于某些i(0≤i≤length)ui≠vi,则它们是不同的。 例如,字符串“ aaaa”仅包含四个不同的子回文,即“ a”,“ aa”,“ aaa”和“ aaaa”。
思路:
注意到,当n = 1的时候,Sub-palindrome的数目最少为1,答案为26个字母。
当n = 2的时候,aa的Sub-palindrome有a和aa,为2个;ab的Sub-palindrome有a,b,两个。(ab不是回文串)所以n = 2的时候答案是26 * 26 = 676;
当n = 3的时候,aaa的Sub-palindrome有a,aa和aaa,为3个;abc有a,b,c,三个……aba则有a,b和aba,三个……发现找不到长度为3以下的Sub-palindrome,所以答案是262626;
当n >= 4的时候,为了让Sub-palindrome的数目最少,我们可以用abc,abc,abc的方法构造。这样的构造法下,答案是262524.
“Since the answer can be huge, output it modulo 998244353.”这一行就是误导人的。
#include<bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while(t--)
{
int n;
cin >> n;
if(n <= 3)
cout << pow(26,n) << endl;
else
cout << 26 * 25 * 24 << endl;
}
return 0;
}