您的位置:首页 > 其它

53.FIB词链

2016-03-07 22:10 357 查看
时间限制: 1 s

空间限制:
128000 KB

题目等级
: 大师 Master

题解


题目描述 Description


Fibonacci词定义如下:FIB1 = b FIB2 = a 当k >= 1时, FIBk+2 = FIBk+1*FIBk

其中* 表示词的连接。因此,我们有:

FIB3 = ab; FIB4 = aba; FIB5 = abaab; FIB6 = abaababa.

问题是,对给定的词,问该词在FIBn中出现多少次。


输入描述 Input Description


输入有两行,第一行为给出的只含有a 或 b的词,长度不超过30.第二行给出一个正整数n, n <= 200.


输出描述 Output
Description


对给定的词,输出在FIBn中出现的次数


样例输入 Sample Input


aba

6


样例输出 Sample Output


3

错误代码:

#include

using namespace std;

#include

#include

char fib[201][1000000],ch[31],n,sum=0;

void input();

void search();

int main()

{

input();

search();

printf("%d",sum);

return 0;

}

void search()

{

int chlong=strlen(ch),fiblong=strlen(fib
);

int fibl=0,chl=0;

while(fibl

{

int cpyfibl=fibl;

while(fib
[cpyfibl]==ch[chl]&&chl

{

chl++;

cpyfibl++;

}

if(chl==chlong)

{

sum++;

chl=0;

}

if(chl!=chlong)

{

chl=0;

}

fibl++;

}

}

void input()

{

scanf("%s",ch);

scanf("%d",&n);

fib[1][0]='b';

fib[2][0]='a';

for(int i=3;i<=n;++i)

{

strcpy(fib[i],fib[i-1]);

strcat(fib[i],fib[i-2]);

}

}

记录第i个词的前M-1位和后M-1位,在递推的时候合并并且更新答案就可以了。

其中M表示所求字符串的长度。

特判:如果M=0的话直接上Fib数。

注意要高精,压四位很好写吧,那个20的常数是高精带来的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: