Codeforces Round 962 (Div. 3) D. Fun 題解

xywww發表於2024-07-30

寫在前面的話

想了一個小時,第一次寫這種題,也算是學到了。可惜這個題本來不難的,沒有寫出來。但是覺得特別好,於是記下,希望對我和大家都有幫助!

題意

給你兩個不等式:

\[ \begin{cases} a \ast b + a \ast c + b \ast c \leq n \\ \tag1 a + b + c \leq x \end{cases} 其中 1 \leq a , b , c , x , n \leq 10 ^ 6 \]

給出 \(x , n\) 要求出符合不等式組的三元組\((a , b, c)\) , 其中$(1 , 2 , 1) , (1 , 1 , 2) $不被認為是同一組解。
約束: 對於T組測試點滿足 , \(1 \leq \sum_{i=1}^{T}x_i , \sum_{i=1}^{T}n_i \leq 10 ^ 6\)

思路

觀察不等式 , 我們可以發現因為\(a \ast c + a \ast b + b \ast c\)這種特殊結構 , 所以\((1 , 2 , 1), (1 , 1 , 2)\) 結果相同 , 它們等價
觀察資料範圍 ,\(10 ^ 6\) 大機率是 \(O(n)\)\(O(nlogn)\) 的做法合理.
觀察到 \(3 \leq a + b + c \leq x\) 這也是一個性質 , 但是貌似和解題沒什麼關係。
觀察到 , 如果\(a \ast b + a \ast c + b \ast c \leq n\) 成立 ,那麼 \(a \ast b \leq n\) 也一定成立。假設我們現在列舉 a , 然後看看最多有多少合法的 b

結論:

  • 對於\(\forall a\) 最多有 \(O(logn)\) b 成立

那麼我們只需要暴力列舉 a , b 即可 , 如果發現不等式不滿足 ,直接放棄更大b的列舉。——因為兩個不等式左邊是單調的
將不等式變形 , 所以答案是

\[ \sum_{a=1} ^{n} \sum_{b=1}^{\lfloor \frac{n}{a} \rfloor} min(\frac{n - a \ast b}{a + b} , x - a - b) \tag2 \]

因為C 最小取 1 , 我們只需要找到滿足兩個等式的C最大取多少將所有的\(a , b\) 都列舉完 , 統計貢獻即可。

時間複雜度證明

首先我們試著找到 b 最多列舉多少個 , 由上 \(a \ast b \leq n\)

\[ b \leq \lfloor \frac{n}{a} \rfloor \tag3 \]

我們知道 b 最多列舉 這麼多 , 但是這不夠顯然!
我們可以嘗試先暴力 , 列舉 a , b.
那麼我們可以得到答案為以下等式:

\[ \sum_{a=1}^a\sum_{b=1}^{\lfloor \frac{n}{a} \rfloor} ((a * b + b * c + a * c) \leq n \&\& (a + b + c) \leq x) \tag4 其中表示式成立結果為 1 , 否則為 0 . \]

Note: 為了保證取到最多的b使得上式儘量成立 , 我們取 \(C := C_{min}\) 即 1。
我們可以透過放縮得到下式:

\[\sum_{a=1}^a\sum_{b=1}^{\lfloor \frac{n}{a} \rfloor} ((a * b + b * c + a * c) \leq n \&\& (a + b + c) \leq x) \leq \sum_{a=1}^a \ast {\lfloor \frac{n}{a} \rfloor} \tag5 \]

\[\sum_{a=1}^a \ast {\lfloor \frac{n}{a} \rfloor} \leq n * \sum_{a=1}^n \frac{1}{a} \tag6 \]

\[ \sum_{a=1}^n \frac{1}{a} = 1 + (ln^n - ln^2) \tag7 \]

對於右邊的等式我們發現是一個調和級數 對於\(\forall a\), 我們最多可以取到\(O(logn)\)個b , 所以最後的時間複雜度是
\(O(nlogn)\)的。

至此,證畢!

後文

如有任何錯誤和建議,請在評論區指出!

相關文章