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('')

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章