#26329: 想問怎麼讓他更快


zhengyouli547@gmail.com (hahaha)

學校 : 高雄市立高雄高級中學
編號 : 134898
來源 : [223.139.151.14]
最後登入時間 :
2021-09-19 15:23:51
c547. Bert 爬樓梯 | From: [42.75.48.167] | 發表日期 : 2021-08-02 15:50

while True:

    try:

        def fib(n):

            if n <= 2:

                return n

            else:

                return fib(n-1)+fib(n-2)

        a=int(input())

        print(fib(a))

    except:

        break

 
#26330: Re:想問怎麼讓他更快


fire5386 (becaidorz)

學校 : 國立清華大學
編號 : 115822
來源 : [140.114.253.147]
最後登入時間 :
2024-10-03 15:39:22
c547. Bert 爬樓梯 | From: [36.227.142.74] | 發表日期 : 2021-08-02 16:23

while True:

    try:

        def fib(n):

            if n <= 2:

                return n

            else:

                return fib(n-1)+fib(n-2)

        a=int(input())

        print(fib(a))

    except:

        break


建表

 
#26338: Re:想問怎麼讓他更快


zhengyouli547@gmail.com (hahaha)

學校 : 高雄市立高雄高級中學
編號 : 134898
來源 : [223.139.151.14]
最後登入時間 :
2021-09-19 15:23:51
c547. Bert 爬樓梯 | From: [42.75.48.167] | 發表日期 : 2021-08-02 17:10

while True:

    try:

        def fib(n):

            if n <= 2:

                return n

            else:

                return fib(n-1)+fib(n-2)

        a=int(input())

        print(fib(a))

    except:

        break


建表

是先建X項,如果測資比X大再從X+1開始算,還是直接建到測資的上下界呢?

沒建過表不太清楚

 
#26339: Re:想問怎麼讓他更快


fire5386 (becaidorz)

學校 : 國立清華大學
編號 : 115822
來源 : [140.114.253.147]
最後登入時間 :
2024-10-03 15:39:22
c547. Bert 爬樓梯 | From: [36.227.142.74] | 發表日期 : 2021-08-02 17:14

看題目的要求 這題上限只有10000,可以直接建完

建的同時可以利用同餘的性質,不然大數運算很花時間

(a + b) % mod = ((a % mod) + (b % mod)) % mod

 
#26366: Re:想問怎麼讓他更快


zhengyouli547@gmail.com (hahaha)

學校 : 高雄市立高雄高級中學
編號 : 134898
來源 : [223.139.151.14]
最後登入時間 :
2021-09-19 15:23:51
c547. Bert 爬樓梯 | From: [42.75.48.167] | 發表日期 : 2021-08-03 16:51

看題目的要求 這題上限只有10000,可以直接建完

建的同時可以利用同餘的性質,不然大數運算很花時間

(a + b) % mod = ((a % mod) + (b % mod)) % mod


NA:33

 

a=[]

for v in range(1,1001):                       #不知道同餘怎麼用所以直接炸

    if v<=3:

        a=a+[v]

    else:

        x=a[v-2]+a[v-3]

        a=a+[x]

while True:

    try:

        f=int(input())

        print(a[f-1])

    except:

        break

 
#26370: Re:想問怎麼讓他更快


fire5386 (becaidorz)

學校 : 國立清華大學
編號 : 115822
來源 : [140.114.253.147]
最後登入時間 :
2024-10-03 15:39:22
c547. Bert 爬樓梯 | From: [111.243.40.70] | 發表日期 : 2021-08-03 20:46

虛擬碼大概長這樣:

fib[10000]  //建一個大小為10000的陣列

fib[0] = 1

fib[1] = 1

for i : (2 ~ 9999)

    fib[i] = (fib[i - 1] + fib[i - 2]) % mod

index = int(input())

print(fib[index])

 

 
#26394: Re:想問怎麼讓他更快


zhengyouli547@gmail.com (hahaha)

學校 : 高雄市立高雄高級中學
編號 : 134898
來源 : [223.139.151.14]
最後登入時間 :
2021-09-19 15:23:51
c547. Bert 爬樓梯 | From: [42.75.48.167] | 發表日期 : 2021-08-04 16:15

虛擬碼大概長這樣:

fib[10000]  //建一個大小為10000的陣列

fib[0] = 1

fib[1] = 1

for i : (2 ~ 9999)

    fib[i] = (fib[i - 1] + fib[i - 2]) % mod

index = int(input())

print(fib[index])

 


我上網查了一下 mod 好像是取餘數

那想請教題目中的 mod 1000000007 是甚麼意思

還有 fib[i] = (fib[i - 1] + fib[i - 2]) % mod 中  % mod 的用意是甚麼

我是覺得可能跟之前講的同餘有關係,維基百科:同餘是相容於某個代數運算的等價關係 (看不懂XD

我自己是理解為 兩數 同除另一數得到的餘數相同 稱兩數同餘

還是是有其他解釋 謝謝!

 
ZeroJudge Forum