題解 2018級演算法第一次練習賽 等比數列求和

2022-06-22 21:36:10 字數 1269 閱讀 8881

這裡等比數列求和使用到的知識點包括:分治和快速冪

其中分治的方法和快速冪的方法是從部落格中學習到的:

等比數列分治求和:

快速冪方法:

結合到本題目中可參考完整**。

在分治求和和快速冪之外取模操作的實現解釋如下:

根據描述可知最後的值是很大的,所以需要取餘,但實際上在計算的過程中就需要進行取餘操作了。所以需要對快速冪函式和分治函式進行一下處理:

首先操作的基礎公式(取餘的等價式):

(a + b) % p = (a % p + b % p) % p (1)

(a - b) % p = (a % p - b % p + p) % p (2)

(a * b) % p = (a % p * b % p) % p (3)

a ^ b % p = ((a % p)^b) % p (4)

基於(4)首先需要對快速冪的乘數進行取模處理,然後在乘起來每乙個值之前還需要對result進行取模處理,然後還需要對乘起來的值進行取模。這樣才能保證快速冪得到的值得到了正常的取模處理(之前就是這裡出錯所以測試點只過了乙個)

基於(1)和(3)需要對分治求和的返回結果分別進行取模處理。

坑點:

取餘出現負數:資料超出了範圍,是沒正確取餘導致的,因為正數取餘不會得到負數。

#includeusing namespace std;

long long mod = 987654323;

long long quickpow(long long q,long long cnt)

mq*=mq;

mq%=mod;

// if(cnt&1!=0)

//

// mq*=mq;

cnt>>=1;

} return result%mod;

}long long getsum(long long q,long long cnt)

else//偶數 }

int main()

return 0;

}

2016級演算法第一次練習賽 A 群鴉的盛宴

本題乍一眼看過去,你可能會想到使用乙個二維陣列a 51 51 來記錄從i到j的路線數。你很厲害,這是dp的思想。可是什麼情況才用dp 分解得到子問題往往不是互相獨立的。這也是dp和分治的最大區別之一。這題我從a走到b,和a之前b之後的格仔完全沒有關係啊!so,冷靜一下再看看,你會發現從1走到3和從2...

2018級第一次上機《點燈》題解

時間限制 300ms 記憶體限制 65536kb有n個燈,編號0 n 10 n 1,一開始都是關閉狀態。每次操作會撥動乙個區間 l,r 燈的開關,也就是說,對於燈i,l i rl i r,如果i是關閉狀態,則操作會使燈亮,反之會使燈滅。請問k次操作後有多少燈亮著。多組輸入資料 每組資料第一行兩個數n...

2016演算法第一次練習賽 A 群鴉的盛宴

時間限制 300ms 記憶體限制 32768kb alvinzh總是比別人慢一拍,比如暑假大家都在追權遊7討論龍母和雪諾大人尷尬相遇的時候,他還在第一季震驚地看著三隻剛出生的小龍。alvinzh的進度很慢,因為他一邊刷著電視劇集,一邊還在看原版 所以現在才看到第五季,雪諾在這頭,龍母在那頭。alvi...