题目链接:

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作为循环节的串。

打表截图:

压缩暴力打表代码:

char ans[25],temp[25];
int Max; int Cal(char * a,int len)
{
int res=1;
for(int i=0;i<len;i++)
{
int j;
for(j=1;i-j>=0&&i+j<len;j++)
if(a[i-j]!=a[i+j])
break;
if(j*2-1>res)
res=j*2-1;
int aa=i,bb=i+1;
while(aa>=0&&bb<len)
{
if(a[aa]!=a[bb])
break;
aa--,bb++;
}
if((i-aa)*2>res)
res=(i-aa)*2;
}
return res;
} void dfs(int cur,int len)
{
if(cur>len)
{
temp[len]='\0';
int cnt=Cal(temp,len);
if(cnt<Max)
{
strcpy(ans,temp);
Max=cnt;
}
else if(cnt==Max)
{
if(strncmp(temp,ans,len)<0)
strcpy(ans,temp);
}
return ;
}
temp[cur]='0';
dfs(cur+1,len);
temp[cur]='1';
dfs(cur+1,len);
} int main()
{
for(int i=1;i<=20;i++)
{
Max=INF;
dfs(0,i);
for(int j=0;j<i;j++)
putchar(ans[j]-'0'+'a');
putchar('\n');
} return 0;
}

代码:

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<ctime>
#define eps 1e-6
#define INF 0x3fffffff
#define PI acos(-1.0)
#define ll __int64
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std; char temp[10][10]={"","a","ab","aab","aabb","aaaba","aaabab",
"aaababb","aaababbb"};
char ba[7]="babbaa"; int main()
{
int t,n,m; scanf("%d",&t);
for(int ca=1;ca<=t;ca++)
{
scanf("%d%d",&n,&m);
printf("Case #%d: ",ca); if(m<=n)
{
for(int i=0;i<m;i++)
putchar('a'+i);
}
else
{
if(n==1)
{
for(int i=0;i<m;i++)
putchar('a');
}
else if(n>=3)
{
for(int i=0;i<m;i++)
{
int j=i%3;
putchar('a'+j);
}
}
else
{
if(m<=8)
{
printf("%s\n",temp[m]);
continue;
}
printf("aaaa");
m-=4;
int num=m/6;
for(int i=1;i<=num;i++)
printf("%s",ba);
m-=num*6;
for(int i=0;i<m;i++)
putchar(ba[i]); }
}
putchar('\n');
}
return 0;
}

数学题(找规律)-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. Spring中常用的hql查询方法(getHibernateTemplate())

    一.find(String queryString); 示例:getHibernateTemplate().find("from bean.User"); 返回所有User对象 二 ...

  2. ApiDemos示例学习(2)——App->Activity->Animation

    现在介绍一下com.example.android.app包下的Animation示例. 关键类及函数: ActivityOption overridePendingTransition() make ...

  3. 用做网页开发经历了三个阶段(附长篇讨论) good

    用做网页开发经历了三个阶段:第一阶:傻干阶段使用Intraweb,傻瓜型,无需知道javascript,html,css,会pascal就可以了. 第二阶:困惑阶段使用Intraweb,有很多限制,比 ...

  4. Android客户端与服务器交互中的token

    学习Token Token是什么? Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Tok ...

  5. setTimeout()与setInterval() 问题

    提示:setTimeout() 只执行 code 一次.如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout(). 1. setInterval(c ...

  6. grep 基于关键字搜索

    grep 'linux' /etc/passwd 搜索passwd文件下的包含linux的行 find / -user linux|grep Video 在用户为linux的根目录下搜房Video内容 ...

  7. Linux网桥

    linux网桥的功能 转发数据包 网桥的功能在延长网络跨度上类似于中继器,然而它能提供智能化连接服务,即根据帧的终点地址处于哪一网段来进行转发和滤除.网桥对站点所处网段的了解是靠"自学习&q ...

  8. SVN报错:can't open file db/txn-current-lock:permission denied 解决方法

    其实这个问题是这样的.下面我举个例子:比如版本库SVN是root用户创建的但是启动服务的时候没有选择root启动,而是在其他用户转托管太下启动的,所以只能读不能写. 解决方法:停止svn服务:kill ...

  9. Request和Response详解

    转自:http://zhidao.baidu.com/link?url=8BI0cjlcFdBSJKHTZlpo874eqtbTJoZfrh3miQgM_05RvSER8skPiBc1wSPZtXT8 ...

  10. 原来你是个这样的JVM

    第一节 本文将与其它文章不同,我们采用章节制来讲述每个知识点,但每个章节之间只有较低的耦合度,只要了解大概主线思路,一般都能看懂! OK啦,进入主题!虚拟机的发展史就不讲啦,和java之间的关系也不言 ...