HDU 1780 Fibonacci String

来源:互联网 发布:淘宝网现在卖多少钱 编辑:程序博客网 时间:2024/05/16 07:28

Fibonacci String


Problem Description
After little Jim learned Fibonacci Number 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] and str[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 in paper. So he just want to know how many times each letter appears in Kth Fibonacci String . Can you help him ?
 

Input
The first line contains a integer N which 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 by a blank.
The string in the input will only contains less than 30 low-case letters.
 

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

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

Sample Input
1ab bc 3
 

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

题意:依照斐波那契的规律处理字符串。给出前两个求第n+1个,例如3就是求第四个是什么样的,然后把每个字母出现多少次输出

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int main(){    int a[52][27],t,i,j,n;    char tr[32],tr2[32];    int l1,l2;    scanf("%d",&t);    while(t--)    {        memset(tr,0,sizeof(tr));        memset(tr2,0,sizeof(tr2));        scanf("%s",tr);        l1=strlen(tr);        scanf("%s",tr2);        l2=strlen(tr2);        scanf("%d",&n);        memset(a,0,sizeof(a));            for(j=0;j<l1;j++)            {                if(tr[j]>='a'&&tr[j]<='z')                a[1][tr[j]-'a']++;            }            for(j=0;j<l2;j++)            {                if(tr2[j]>='a'&&tr2[j]<='z')                a[2][tr2[j]-'a']++;            }        for(i=3;i<=n+1;i++)        {            for(j=0;j<26;j++)            {                a[i][j]+=a[i-1][j]+a[i-2][j];            }        }        for(i=0;i<26;i++)        {            printf("%c:%d\n",'a'+i,a[n+1][i]);        }        printf("\n");    }    return 0;}


2 0
原创粉丝点击