杭电1708Fibonacci String

Fibonacci String

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 4641    Accepted Submission(s): 1566

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

1
ab bc 3

Sample Output

a:1
b:3
c:2
d: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:0
u:0
v:0
w:0
x:0
y:0
z:0

Author

linle

Source

HDU 2007-Spring Programming Contest

好坏好坏的一道题,不知道算不算水题,感觉这道题还挺好的,斐波那契字符串,就是说第0串字符为 ab,第1串为bc,那么根据斐波那契第二串字符为abbc,第三串为bcabbc因为第三串里边有1个a,三个b,两个c,别的没有了,所以输出了测试样例那样的.

要是按照斐波那契一个一个字符串的加,估计输入一个50,最后一个的字符串都不知道多长了,同时字符数组也开不了这么大,于是就开始分析,26个字母里边的每一个字母也是按斐波那契规律增长的,比如说,a在第0个字符串里边是1次,第1个字符串里边是0次,第二个里边是1+0=1次,第三次就是1+0=1次,同理得到了样例输出的b:3;

所以根据原理,就可以写出简单的代码.

附ac代码:

#include<stdio.h>
#include<string.h>
char c[1000],s[1000];
int a[27][100];//储存第1~100次所求字符串里边的第1~26个字母的个数.
int main()
{
	int t,m,n,k,i,j;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%s%s%d",c,s,&n);
		int len=strlen(c);//测长度
		int lem=strlen(s);
		memset(a,0,sizeof(a));//清零a数组.
		for(j=0;j<len;j++)
		for(i=1;i<=26;i++)
		if(c[j]==i+'a'-1)//如果当前字符等于第i个字母
		a[i][1]++;//则在a[i][1]++;
		for(j=0;j<lem;j++)
		for(i=1;i<=26;i++)
		if(s[j]==i+'a'-1)
		a[i][2]++;	//同理得到第二个字符串的 每一个字母有多少个.
		for(i=1;i<=26;i++)
		for(j=3;j<=n+1;j++)
		a[i][j]=a[i][j-1]+a[i][j-2];//进行斐波那契相加.
		for(i=1;i<=26;i++)
		printf("%c:%d\n",i+'a'-1,a[i][n+1]);
		printf("\n");//每一次样例后需要加一个换行,因为没看这个pe了一次.
	}
	return 0;
}

附测试样例:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-03 07:01:23

杭电1708Fibonacci String的相关文章

hdu 1016 Prime Ring Problem DFS解法 纪念我在杭电的第一百题

Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 29577    Accepted Submission(s): 13188 Problem Description A ring is compose of n circles as shown in diagram. Put natural num

杭电ACM分类

杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索1006 Redraiment猜想 数论:容斥定理1007 童年生活二三事 递推题1008 University 简单hash1009 目标柏林 简单模拟题1010 Rails 模拟题(堆栈)1011 Box of Bricks 简单题1012 IMMEDIATE DECODABILITY

一个人的旅行 HDU杭电2066【dijkstra算法】

http://acm.hdu.edu.cn/showproblem.php?pid=2066 Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景--草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女--眼看寒假就快到了,这么一大段时间,可不

杭电1272 并查集找环+判断连通

杭电1272 并查集找环+判断连通 E - E Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1272 Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B

杭电ACM Java实现样例

若使用Java求解杭电ACM,答案提交必须注意两点: 1.类名一定得是Main,否则服务器无法编译: 2.必须用while进行输入判断. 以1000题测试题为例,代码如下: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan=new Scanner(System.in); while(scan.hasNextInt()) { int a=scan.n

HDU 4937 (杭电多校 #7 1003题)Lucky Number(瞎搞)

题目地址:HDU 4937 多校的题以后得重视起来...每道题都错好多次...很考察细节.比如这道....WA了无数次.... 这题的思路自己真心想不到...这题是将进制后的数分别是1位,2位,3位和更多位的分开来计算. 当是1位的时候,显然只有3到6,此时只能是-1 当是2位的时候,可以转换成一元一次方程求解 当是3位的时候,可以转换成一元二次方程求解 当是4位的时候,此时最多也只有7000个数,7000^3接近1e12.所以剩下的直接枚举进制数来判断即可. 代码如下: #include <i

HDU 4907 (杭电BC#3 1001)Task schedule(水)

题目地址:HDU 4907 水题...不多说..哈希后从后往前遍历一遍就行了. 代码如下: #include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <ctype.h> #include <queue> #include <map> #include<a

HDU 4908 (杭电 BC #3 1002题)BestCoder Sequence(DP)

题目地址:HDU 4908 这个题是从m开始,分别往前DP和往后DP,如果比m大,就比前面+1,反之-1.这样的话,为0的点就可以与m这个数匹配成一个子串,然后左边和右边的相反数的也可以互相匹配成一个子串,然后互相的乘积最后再加上就行了.因为加入最终两边的互相匹配了,那就说明左右两边一定是偶数个,加上m就一定是奇数个,这奇数个的问题就不用担心了. 代码如下: #include <iostream> #include <stdio.h> #include <string.h&g

杭电1020

Encoding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 26063    Accepted Submission(s): 11467 Problem Description Given a string containing only 'A' - 'Z', we could encode it using the follow