題解:CF1599F Mars

jxy2012發表於2024-06-27

題目就是讓求每次詢問一個區間能否組成一個公差為 \(d\) 的等差數列。

首先我們可以算出一個等差數列的首項 —— 求區間和然後逆推就好了。那麼,我們如何判斷一個區間可以組成這樣一個等差數列?

考慮用一個雜湊用來判定給定一個序列,問區間中某一個序列能否重排為該序列 的問題。

考慮對每個元素的 \(k\) 次方之和進行“雜湊” 。如果這個數列和原數列相同,那麼其無論多少次方的和都應該是一樣的。容易發現,不同的序列面對不同的 \(k\) 的貢獻是不一樣的,所以可以這樣來判斷。

時間複雜度就取決於 \(k\) 了,實際中選擇了 \(k={1,2}\) 然後套用等差數列平方求和公式即可。

相關文章