题目链接: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; }