P4994 終於結束的起點

2022-07-12 05:54:09 字數 1113 閱讀 9035

講道理,洛谷上面許多題讓我知道了什麼叫做理科生的浪漫

這道題拿道題面的時候,第一反應就是斐波那契數列,具體實現這裡就不贅述了。

題目中說求最小的f[i]%m0&&f[i+1]%m1這個情況時的i,第乙個想法就是用乙個無限迴圈,一直模擬斐波那契數列,每一次求出來的斐波那契都進行一次判斷,此時找出來的第乙個斐波那契就是求出來的最小值(**就不放出來了)

看看那個難度,看看那個資料範圍,想都不用想,這種做法明顯會超時和re,太原始了。就算是開了unsigned long long什麼的,也只有40分,至於矩陣乘法,本蒟蒻不會,至於有沒有用,那我也不知道了

因為在操作的時候,我的第一種做法是在判斷是否為0和1的時候才mod的,另外一種做法就是在算的時候就是mod,學了其實先後順序沒有什麼影響,這個時候有80分了,這能解決很多資料過大的問題

#includeusing namespace std;

unsigned long long m,f[100005];

int main()

} return 0;

}

這個時候我們的剩下兩個錯誤點是re,一般都是有關於什麼陣列溢位之類的問題,那麼記憶體空間的大小就需要解決。回歸到斐波那契的實質,其實它的操作只在於三個數字之間,那麼我們可以明白,這樣你就不必開乙個陣列記錄每一次的值,如果不好理解,最多用6個變數就可以了,但其實3個足矣,這樣這道題就滿分了

#includeusing namespace std;

long long m,a=0,b=1,c=1;

int main(){

cin>>m;

for(long long i=1;i<=9999999;i++){

c=a,a=b,b=(a+c)%m;

if(a%m==0&&b%m==1){

cout《對於斐波那契數列涉及到的一些mod和加法運算,是可以在運算的時候處理的,這樣可以保證資料不會超限;在這樣的情況下,還要去考慮陣列是否溢位,對於這個的處理,應該在於對於一些特殊運算的本質不夠了解,知道題就可以在3個數之間不斷轉換達到同樣的目的

而像計算係數這類的題,加上係數的楊輝三角是和組合數有關的,但也是可以找規律的,所以對於這類和數學知識掛鉤的題目,應該去尋找一些普遍規律,或者說去尋找運算的本質是什麼

洛谷P4994 終於結束的起點

終於結束的起點 終於寫下句點 終於我們告別 終於我們又回到原點 乙個個 oier 的競賽生涯總是從一場 noip 開始,大多也在一場 noip 中結束,好似一次次輪迴在不斷上演。如果這次 noip 是你的起點,那麼祝你的 oi 生涯如同夏花般絢爛。如果這次 noip 是你的終點,那麼祝你的 oi 回...

洛谷P4994 終於結束的起點 題解

求讚,求回覆,求關注 這道題和斐波那契數列的本質沒有什麼區別。這道題應該就是乙個斐波那契數列的計算吧,為了防止數字過大,我們可以每次 m 為了防止時間過長,我們可以用遞推 為了防止陣列開炸,我們可以只記錄當前和上一項 於是這道題聽說還是一道原題?但賽後去看了看,真的比原題水一些呀。includeus...

洛谷P4994 終於結束的起點 題解

求讚,求回覆,求關注 這道題和斐波那契數列的本質沒有什麼區別。這道題應該就是乙個斐波那契數列的計算吧,為了防止數字過大,我們可以每次 m 為了防止時間過長,我們可以用遞推 為了防止陣列開炸,我們可以只記錄當前和上一項 於是這道題聽說還是一道原題?但賽後去看了看,真的比原題水一些呀。includeus...