题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4731

题目大意:

给一个n表示有n种字母(全部小写),给一个m,求一个由不超过n种字母组成的m个小写字母的串S,使得S在所有的满足要求的串中最长的回文子串长度最短。

解题思路:

显然当n>=3时肯定是abcabc这样构造。

当n=1时为aaaaaa...

当n=2时,打表可以发现规律。当m>=9时,都满足开始为aaaa,后面为以babbaa作为循环节的串。

打表截图:

压缩暴力打表代码:

  1. char ans[25],temp[25];
  2. int Max;
  3.  
  4. int Cal(char * a,int len)
  5. {
  6. int res=1;
  7. for(int i=0;i<len;i++)
  8. {
  9. int j;
  10. for(j=1;i-j>=0&&i+j<len;j++)
  11. if(a[i-j]!=a[i+j])
  12. break;
  13. if(j*2-1>res)
  14. res=j*2-1;
  15. int aa=i,bb=i+1;
  16. while(aa>=0&&bb<len)
  17. {
  18. if(a[aa]!=a[bb])
  19. break;
  20. aa--,bb++;
  21. }
  22. if((i-aa)*2>res)
  23. res=(i-aa)*2;
  24. }
  25. return res;
  26. }
  27.  
  28. void dfs(int cur,int len)
  29. {
  30. if(cur>len)
  31. {
  32. temp[len]='\0';
  33. int cnt=Cal(temp,len);
  34. if(cnt<Max)
  35. {
  36. strcpy(ans,temp);
  37. Max=cnt;
  38. }
  39. else if(cnt==Max)
  40. {
  41. if(strncmp(temp,ans,len)<0)
  42. strcpy(ans,temp);
  43. }
  44. return ;
  45. }
  46. temp[cur]='0';
  47. dfs(cur+1,len);
  48. temp[cur]='1';
  49. dfs(cur+1,len);
  50. }
  51.  
  52. int main()
  53. {
  54. for(int i=1;i<=20;i++)
  55. {
  56. Max=INF;
  57. dfs(0,i);
  58. for(int j=0;j<i;j++)
  59. putchar(ans[j]-'0'+'a');
  60. putchar('\n');
  61. }
  62.  
  63. return 0;
  64. }

代码:

  1. #include<iostream>
  2. #include<cmath>
  3. #include<cstdio>
  4. #include<cstdlib>
  5. #include<string>
  6. #include<cstring>
  7. #include<algorithm>
  8. #include<vector>
  9. #include<map>
  10. #include<set>
  11. #include<stack>
  12. #include<list>
  13. #include<queue>
  14. #include<ctime>
  15. #define eps 1e-6
  16. #define INF 0x3fffffff
  17. #define PI acos(-1.0)
  18. #define ll __int64
  19. #define lson l,m,(rt<<1)
  20. #define rson m+1,r,(rt<<1)|1
  21. #pragma comment(linker, "/STACK:1024000000,1024000000")
  22. using namespace std;
  23.  
  24. char temp[10][10]={"","a","ab","aab","aabb","aaaba","aaabab",
  25. "aaababb","aaababbb"};
  26. char ba[7]="babbaa";
  27.  
  28. int main()
  29. {
  30. int t,n,m;
  31.  
  32. scanf("%d",&t);
  33. for(int ca=1;ca<=t;ca++)
  34. {
  35. scanf("%d%d",&n,&m);
  36. printf("Case #%d: ",ca);
  37.  
  38. if(m<=n)
  39. {
  40. for(int i=0;i<m;i++)
  41. putchar('a'+i);
  42. }
  43. else
  44. {
  45. if(n==1)
  46. {
  47. for(int i=0;i<m;i++)
  48. putchar('a');
  49. }
  50. else if(n>=3)
  51. {
  52. for(int i=0;i<m;i++)
  53. {
  54. int j=i%3;
  55. putchar('a'+j);
  56. }
  57. }
  58. else
  59. {
  60. if(m<=8)
  61. {
  62. printf("%s\n",temp[m]);
  63. continue;
  64. }
  65. printf("aaaa");
  66. m-=4;
  67. int num=m/6;
  68. for(int i=1;i<=num;i++)
  69. printf("%s",ba);
  70. m-=num*6;
  71. for(int i=0;i<m;i++)
  72. putchar(ba[i]);
  73.  
  74. }
  75. }
  76. putchar('\n');
  77. }
  78. return 0;
  79. }

数学题(找规律)-hdu-4371-Minimum palindrome的更多相关文章

  1. HDU 4731 Minimum palindrome (2013成都网络赛,找规律构造)

    Minimum palindrome Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  2. HDU 4731 Minimum palindrome 打表找规律

    http://acm.hdu.edu.cn/showproblem.php?pid=4731 就做了两道...也就这题还能发博客了...虽然也是水题 先暴力DFS打表找规律...发现4个一组循环节.. ...

  3. HDU 4731 Minimum palindrome (找规律)

    M=1:aaaaaaaa…… M=2:DFS+manacher, 暴出N=1~25的最优解,找规律.N<=8的时候直接输出,N>8时,头两个字母一定是aa,剩下的以aababb循环,最后剩 ...

  4. hdu 1030 Delta-wave(数学题+找规律)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1030 Delta-wave Time Limit: 2000/1000 MS (Java/Others ...

  5. HDU 4731 Minimum palindrome 2013 ACM/ICPC 成都网络赛

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4731 题解:规律题,我们可以发现当m大于等于3时,abcabcabc……这个串的回文为1,并且字典数最小 ...

  6. hdu_1030(数学题+找规律)

    规律就是两个数字的level差+left差+right差 代码: #include<cstdio> #include<iostream> #include<cstring ...

  7. HDU 5795 A Simple Nim(SG打表找规律)

    SG打表找规律 HDU 5795 题目连接 #include<iostream> #include<cstdio> #include<cmath> #include ...

  8. hdu 3032 Nim or not Nim? (SG函数博弈+打表找规律)

    Nim or not Nim? Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Sub ...

  9. HDU 2147 kiki's game (简单博弈,找规律)

    kiki's game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 40000/1000 K (Java/Others)Total ...

随机推荐

  1. python----面向对象:1类的定义

    1.python中定义类的格式如下: class className(baseClassName): def functionName(argslist): 2.定义一个person类:它有一个Nam ...

  2. LPC同STM32的比较

    Cortex-M3是新兴起来的一种ARM7的核,而ARM7TDMI是一种传统的经典的ARM内核.我们就抛开这一切,来比较一下两则的异同. 我们就在以下平台上比较吧: STMicoelectronics ...

  3. QtQml 应用程序的性能考虑与建议(来自小V的翻译)

    QtQml 应用程序的性能考虑与建议 原文:csdn aidear_evo QtQml应用程序的性能考虑与建议 本文翻译自Qt官网文档:http://doc.qt.io/qt-5/qtquick-pe ...

  4. docker 容器管理常用命令

    Docker 容器管理: docker create -it centos //这样可以创建一个容器,但该容器并没有启动: create Create a new container 创建一个容器: ...

  5. docker 基于现有镜像修改后保存,上传私有仓库

    docker:/root# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f3cb864be528 192.168.3 ...

  6. Python学习笔记6-异常捕获取

    #--encoding:utf-8-- try: float('abc') except Exception,e: print e try: float(1.2) except Exception,e ...

  7. LCP Array(思维)

    LCP Array Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Tota ...

  8. jquery动态连接节点

    <1> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  9. $(this) 和 this

    在使用 jQuery 时,$(this) 和 this 具体指: this :是当前 DOM 对象: $(this) 是jQuery对象: 例子: <input type="text& ...

  10. svn代码版本管理

    1.0开发,做dev1.0的branch此时的目录结构svn://proj/             +trunk/ (不负担开发任务)             +branches/          ...