题意:定义value为一个字符串中的最长回文字串的长度。用前m个字母(字母表中的前m个,可以不全用)表示一个长度为n的字符串。输出value最小时的字符串。
第一次打网络,结果只做出一道水题。这道题完全没有思路,即使最后想出一点点东西也是队友想的,也没能做出来。
m=1的时候只能不断的输出a。
m>=3的时候可以abcabc这样不断循环。
难点就在在于m=2的时候,n<=8的时候(也就是最长回文长度小于等于3的时候)字符串都是没有规律的,可以打一个表;其他情况,最长回文长度最小是4,以aa开头,再不断循环aababb即可,注意当最后不能输出一个整的aababb时,而且这块不完整的部分长度小于等于4那么就全输出a而不是按照aaba这样输出。
代码是copy了别人的,善哉善哉。。
#include<cstdio>
char s[10][10]={"","a","ab","aab","aabb","aaaba",
"aaabab", "aaababb","aaababbb"};
int main()
{
int t,cnt=0;
scanf("%d",&t);
while(t--)
{
int m,n;
scanf("%d%d",&m,&n);
printf("Case #%d: ",++cnt);
if(m!=2)
{
if(m>3) m=3;
for(int i=0;i<n;i++)
printf("%c",'a'+i%m);
}
else
{
if(n<=8)
printf("%s",s[n]);
else
{
printf("aa");
n-=2;
for(int i=0;i<n/6;i++)
printf("aababb");
n%=6;
if(n<=4)
for(int i=0;i<n;i++)
printf("a");
else
printf("aabab");
}
}
puts("");
}
}