好贷网好贷款

hdu 4731 Minimum palindrome(暴力打表找规律)

发布时间:2016-12-4 10:04:54 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"hdu 4731 Minimum palindrome(暴力打表找规律)",主要涉及到hdu 4731 Minimum palindrome(暴力打表找规律)方面的内容,对于hdu 4731 Minimum palindrome(暴力打表找规律)感兴趣的同学可以参考一下。

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4731 题目大意:用字母表的前m个字母(有的可以不用)构造一个长度为n的字符串,要求这个字符串的最长回文串的长度最小。 思路:如果m ==1 ,那么就肯定全是a,如果m >= 3,可以证明肯定是 abc 这样循环,关键在于m == 2这里,也就是只有ab的时候。然后就是打表了,打前 20 个,很容易可以发现规律,有个循环节,然后最后再处理一下就好了,前几个特判。 这道题目真的囧了,下午比赛全卡在这题上了,没去想暴力打表找规律,然后一直在那边YY,唉,不说了,说多了都是泪啊。。 T^T  记住,以后找规律,先暴力打表,不要手算去! 代码如下: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; /* a ab aab aabb aaaba aaabab aaababb aaababbb aaaababba aaaababbaa aaaababbaaa aaaababbaaaa aaaababbaabab aaaababbaababb aaaababbaababba aaaababbaababbaa aaaababbaababbaaa aaaababbaababbaaaa aaaababbaababbaabab */ int main() { int T; scanf("%d",&T); for(int cas = 1;cas<=T;cas ++) { int m,n; scanf("%d%d",&m,&n); printf("Case #%d: ",cas); if(m == 1) { for(int i = 0;i<n;i++) printf("a"); puts(""); } else if(m == 2) { if(n == 1) { puts("a"); } else if(n ==2) { puts("ab"); } else if(n == 3) { puts("aab"); } else if(n == 4) { puts("aabb"); } else if(n ==5) { puts("aaaba"); } else if(n == 6) { puts("aaabab"); } else if(n ==7) { puts("aaababb"); } else if(n == 8) { puts("aaababbb"); } else { printf("aa"); int num = (n - 2)/6; for(int i = 1;i<=num;i++) { printf("aababb"); } int ed = num*6 +2; if(ed <= n - 1 || ed >= n - 4) { for(int i = ed +1 ;i<=n;i++) printf("a"); } else if(ed == n - 5) { printf("aabab"); } puts(""); } } else { for(int i = 0;i<n;i++) { if(i%3 == 0) printf("a"); else if(i%3 ==1) printf("b"); else printf("c"); } puts(""); } } return 0; }

上一篇:redis--5--Redis 的安装配置介绍
下一篇:&nbsp;LoadRunner编程之文件的操…

相关文章

相关评论