1. 程式人生 > 其它 >2021清北學堂國慶刷題班Day7

2021清北學堂國慶刷題班Day7

比賽總結

T1

https://noip.ac/rs/show_problem/3673

第一次見到這種套路,感覺比較陌生,所以賽時並沒有想出正解。

將題意轉化一步: $$ X = \prod_{i = L}^{R}{i} = \frac{R!}{(L-1)!} $$

這提供給我們一個思路:預處理 $ [1, 1e5] $ 所有數的階乘, 然後列舉 $ L $ , 二分 $ R $ 的位置即可 $ O(n log_2 n) $ 解決問題。

但是,階乘增長非常快,我們不能直接準確的計算出 $ [1, 1e5] $ 所有數的階乘,那就要考慮如何減小階乘的大小。

一種思路是把 $ X $ 轉化為 $ log_2 x $ ,那麼 $ log_2 (L \times (L + 1) \times ... \times R) = log_2 L + log_2 (L + 1) + ... + log_2 R $ 。

這樣就有效減小了階乘以及 $ X $ 的大小,但是存在精度問題,所以期望得分不是 $ 100 $。

正解思路是取若干個($ \geq 2 $)個大質數,分別對左右兩邊取模,求出其雜湊值,然後列舉 $ L $ , 二分 $ R $ 即可。

需要注意的是,如果模數大小在 $ 1e9 $ 級別, 那麼雜湊衝突概率為 $ 10^{-9} $ 左右, 而 $ L $ 和 $ R $ 最多會有 $ 5 \times 10^9 $ 種組合,此時期望雜湊衝突數為 $ 5 $, 因此需要多個模數。

T2

https://noip.ac/rs/show_problem/3674