题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6754

其实就是一个签到题,读懂题想到了就很简单,但我反正是看了半天没看懂,最后还多亏组员成功拿下

题意就是给你一个长度为n的字符串,字符串的子串为回文串的数量最少有多少。

思路:当n=1时,很明显答案为26(a~z)
当n=2时,字符串无非两种情况,aa,ab(其它任意两个字符都行,这里只是举个例子),两种情况都增加一个回文子串,前者为a,aa。后者为a,b。所以当n=2时答案为2626
当n=3时,我们增加一个字符无非就是四种情况aaa,abb,aba,abc,都增加了一个回文子串,所以答案是 26 *26 * 26

当n>=4时,我们可以选择构造abcabcabc…这样的字符串,因为这样除了a,b,c就不会产生其他的子回文串并且使得最低的为3个,所以答案为C(26,3) A(3,3)

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef unsigned long long ull;

int main()
{
	ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t;cin >> t;
    while(t--)
    {
    	int n; cin >> n;
    	if(n<=3) {
    		ll ans; ans= pow(26, n);
    		cout << ans << eandl;
		}
		else cout << 15600 << endl; //C(26,3)* A(3,3)
	}
	return 0;
 }