1004:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1004&cid=879
题意:要你构造一个由小写字母组成的长度为n字符串S,使得S的回文子串最少(回文子串的概念你可以在下面的例子里面理解,其实就是“子串+回文”)
思路:
当n=1时:如'a'它的回文子串数量是1。所以n=1时,有26种S可以使得其回文子串最少。
当n=2时,如'aa','ab'前者的回文子串有'a','aa'两种,后者也是两种'a','b'。前者有26种('aa','bb','cc')后者有26 * 25=650种。合在一起676恰是 种。
当n=3时,如'aaa','aba','abc'它们的回文子串数都是3。合在一起就是 种
当n=4时,本质就是在n=3的情况下加一个字符,那么对于前两种,加一个字符必定会多一种回文子串,但是第三种加一个'a'时就不会多,那么此时共有262524种情况。
以此类推,都是在前一种上添加一个字符,最后发现当是'abcabcabc'形式时,回文子串最少是3,此时共有262524种S。
至此代码也就写出来了。
//team yglance+xhwl+CN.TTDragon #include<bits/stdc++.h> typedef long long ll; const ll mod=1e9+7; const ll maxn=1e5+7; const double pi=acos(-1); using namespace std; int main() { ios::sync_with_stdio(false); int t ; cin>>t; while(t--) { int n; cin>>n; if(n==1) { cout<<26<<endl; } else if(n==2) { cout<<26*26<<endl; } else if(n==3) { cout<<26*26*26<<endl; } else { cout<<26*25*24<<endl; } } return 0; }