2021/11/08 集訓補題
ljs神 Orz,再一次大比分rank1,無線接近AK。膜拜nbnbnbnbnbnbnbnbnb的ljs隊長。
T1
Description
有集合 \(w_{1,2,...,n}\),分到 \(k\) 個集合中,貢獻是每個集合個數乘上 \(\sum w\) 的和。問總情況貢獻和。
Solution
挺有意思的,想了1個多小時,像個sb一樣。
考慮對於一個點計算貢獻,發現只需要算出每種情況所屬的集合之和的和。考慮兩種情況,一種是自己當一個集合,這種情況貢獻是 \(\begin{Bmatrix} n-1 \\ k-1\end{Bmatrix}\)。另外一種情況是放入其它集合,這種情況貢獻就是 \(\begin{Bmatrix} n-1 \\ k\end{Bmatrix}\times (n-1+k)\)
所以直接算 \(\begin{Bmatrix} n-1 \\ k\end{Bmatrix}\) 和 \(\begin{Bmatrix} n-1 \\ k-1\end{Bmatrix}\) 就行了。
T2
Description
有 \(n\) 個商店,商店兩兩之間都只需要 \(1\) 分鐘,加入在時間 \(t\) 來到商店 \(i\) ,那麼需要 \(t\times a_i+b_i\) 來排隊。問在 \(T\) 之前最多能到幾個商店買到東西。
Solution
考試的時候懶得繼續優化了。/kk
不難發現加入我們選了 \((a_1,b_1),(a_2,b_2)\),那麼 \((a_1,b_1)\)
你發現這個東西似乎是有傳遞性的,所以我們就可以排序之後,相當於選一個子序列出來。這個顯然可以用字首最小值做到 \(\Theta(n^2)\)。
發現我們 \(a\not= 0\) 的時候,每次 \(t\) 必定翻倍,所以最多 \(\log T\)
T3
Description
給出 \(n\),表示有一個長度為 \(n\) 的序列,每個位置可以選 \((0,2^n)\),使得每個位置的值都互不相同,使得它們的異或值不為 \(0\),求方案數對 \(1000000007\) 取模。
\(n\le 10^7\)
Solution
考慮容斥,我們考慮 \(f_i\) 表示前面 \(i\) 個位置已經放好了,且互不相同,異或值為 \(0\) 的方案數。為了算 \(f_i\) 我們可以設 \(p_i\) 表示前面 \(i\) 個數互不相同的方案數,這個可以發現很好算。
可以發現 \(f_i=p_{i-1}-f_{i-1}-(2^n-i+1)\times f_{i-2}\times (i-1)\),因為你肯定需要第 \(i\) 個位置的值等於前面 \(i-1\) 個位置的異或和,所以總方案就是 \(p_{i-1}\),然後需要減去前面異或值為 \(0\) 的情況,因為這時第 \(i\) 個位置為 \(0\)。還需要減去前面有相同的值的情況,這個時候相當於有 \(i-2\) 個異或值為 \(0\),再加上兩個相同的值。最後答案就是 \(p_i-f_i\) 。
似乎有其他的容斥做法,但我推不動。