2021清北學堂國慶刷題班Day7
阿新 • • 發佈:2021-10-09
比賽總結
T1
第一次見到這種套路,感覺比較陌生,所以賽時並沒有想出正解。
將題意轉化一步: $$ 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 $, 因此需要多個模數。