1. 程式人生 > 其它 >2021/11/08 集訓補題

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)\)

\((a_2,b_2)\) 之前的條件就是對於任意 \(t\) ,都存在 :

\[(t\times a_1+b_1+1)\times a_2+b_2<(t\times a_2+b_2+1)\times a_1+b_1 \]\[\Rightarrow (b_1+1)\times a_2+b_2<(b_2+1)\times a_1+b_1 \]

你發現這個東西似乎是有傳遞性的,所以我們就可以排序之後,相當於選一個子序列出來。這個顯然可以用字首最小值做到 \(\Theta(n^2)\)

發現我們 \(a\not= 0\) 的時候,每次 \(t\) 必定翻倍,所以最多 \(\log T\)

此操作。\(a=0\) 的情況你發現可以直接加在後面。

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\)

似乎有其他的容斥做法,但我推不動。

T4

Description