HDOJ17098 Fibonacci String

来源:互联网 发布:金融行业前景知乎 编辑:程序博客网 时间:2024/06/13 15:17

Fibonacci String

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6631    Accepted Submission(s): 2285


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
 简单题,后一个等于前两个之和,但这里是string,可以进行一下转化,
使用int数组来存储字母的个数,当然k=1,2的时候需要另外判断。
下面AC代码:
import java.util.Arrays;import java.util.Scanner;public class Main{private static Scanner scanner;public static void main(String[] args) {scanner = new Scanner(System.in);int cases = scanner.nextInt();while (cases-- > 0) {String str1 = scanner.next();String str2 = scanner.next();int k = scanner.nextInt();// (0 <= K < 50int a[] = count(str1);int b[] = count(str2);int c[] = new int[26];for (int i = 2; i <= k; i++) {c = add(a,b);a = Arrays.copyOf(b, 26);b = Arrays.copyOf(c, 26);}if(k==0){c=a;}if(k==1){c=b;}for (int i = 0; i < c.length; i++) {System.out.println((char)(i+97)+":"+c[i]);}System.out.println();}}private static int[] add(int[] a, int[] b) {for (int i = 0; i < b.length; i++) {a[i] = a[i]+b[i];}return a;}public static int[] count(String str){int arr[] = new int[26];for (int i = 0; i < str.length(); i++) {char ch = str.charAt(i);int t = ch-97;arr[t]++;}return arr;}}


原创粉丝点击