2019牛客暑期多校训练营(第十场)B Coffee Chicken 递归

题意:用s1和s2串组合成斐波那契序列,然后让你输出fn的第k的字母之后的十个字母

题解:用递归实现,因为直接求序列会时间复杂度会爆炸,所以每次可以转移到之前的序列求,正好用递归来实现

注意只用到f57就可以,因为k的上限有要求

f=[0]
s1="COFFEE"
s2="CHICKEN"
def init():
    f.append(6)
    f.append(7)
    for i in range(3,57+1):
        x=f[i-1]+f[i-2]
        f.append(x)
def dfs(n,k):
    global s1,s2
    if(k>f[n]):
        return
    if(n==1):
        print('%c'%s1[k-1],end='')
    elif(n==2):
        print('%c'%s2[k-1],end='')
    else:
        if(k>f[n-2]):
            dfs(n-1,k-f[n-2])
        else:
            dfs(n-2,k)
t=int(input())
while(t):
    t-=1
    n,k=map(int,input().split())
    init()
    if(n>57):
        for i in range(10):
            dfs(57,k+i)
        print('')
    else:
        for i in range(10):
            dfs(n,k+i)
        print('')

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值