HDU 1708 Fibonacci String

来源:互联网 发布:solidworks有mac版吗 编辑:程序博客网 时间:2024/06/05 10:43

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

 

Fibonacci String

TimeLimit: 3000/1000 MS(Java/Others)    MemoryLimit: 32768/32768 K (Java/Others)
Total Submission(s):1556    AcceptedSubmission(s): 554


Problem Description
After little Jim learned FibonacciNumber in the class , he was very interest in it.
Now he is thinking about a new thing -- Fibonacci String .

He defines : str[n] = str[n-1] + str[n-2] ( n > 1)

He is so crazying that if someone gives him two strings str[0] andstr[1], he will calculate the str[2],str[3],str[4] ,str[5]....

For example :
If str[0] = "ab"; str[1] = "bc";
he will get the result , str[2]="abbc", str[3]="bcabbc" ,str[4]="abbcbcabbc" …………;

As the string is too long ,Jim can't write down all the strings inpaper. So he just want to know how many times each letter appearsin Kth Fibonacci String . Can you help him ?
 

Input
The first line contains a integer Nwhich indicates the number of test cases.
Then N cases follow.
In each case,there are two strings str[0], str[1] and a integer K(0 <= K < 50) which are separated bya blank.
The string in the input will only contains less than 30 low-caseletters.
 

Output
For each case,you should count how manytimes each letter appears in the Kth Fibonacci String and print outthem in the format "X:N".
If you still have some questions, look the sample outputcarefully.
Please output a blank line after each test case.

To make the problem easier, you can assume the result will in therange of int.
 

Sample Input
1 ab bc3
 

Sample Output
a:1 b:3 c:2d:0 e:0 f:0 g:0 h:0 i:0 j:0 k:0 l:0 m:0 n:0 o:0 p:0 q:0 r:0 s:0 t:0u:0 v:0 w:0 x:0 y:0 z:0
 

Author
linle
 

Source
HDU 2007-Spring Programming Contest
 

Recommend
lcy
 
分析:这个题,我刚刚看还真觉得麻烦,因为有26个字母,难道要int26个?最后看了网上的解题报告才知道,原来字符就是ASCII码,通过ASCII码用类似哈希打表的方式保存即可,再加上斐波那契数列递推就可以了。
代码如下:
#include<stdio.h>
#include<string.h>
intans[50][27];             //开空间要足够大,在这地方wrong了次.50 27应该是允许的最小值了
int main()
{
 int T,n,i,j;
 char s1[31],s2[31];
 scanf("%d",&T);
 while(T--)
 {
  scanf("%s%s%d",s1,s2,&n);
  memset(ans,0,sizeof(ans));
  for(i=0;s1[i]!=NULL;i++)
    ans[0][s1[i]-'a']++;
       for(i=0;s2[i]!=NULL;i++)
    ans[1][s2[i]-'a']++;
       for(i=2;i<=n;i++)
    for(j=0;j<26;j++)
            ans[i][j]=ans[i-1][j]+ans[i-2][j];
       for(i=0;i<26;i++)
          printf("%c:%d\n",'a'+i,ans[n][i]);
       printf("\n"); //Please output a blank line after each testcase.又wrong了次。。。
 }
 return 0;
}
原创粉丝点击