Codeforces Round 945 (Div. 2) (A - E)

Lu_xZ發表於2024-05-20

A

每一輪對總分的貢獻都是 \(2\),如果 \(p_1 + p_2 + p_3\) 為奇數則無解。

  • \(p_1 + p_2 \le p_3\),最多 \(p_1 + p_2\) 輪。
  • \(p_1 + p_2 > p_3\),可以 \(1, 2\) 輪流將 \(3\) 耗完,然後互相匹配,最多 \(\dfrac{p_1 + p_2 + p_3}{2}\)

B

  1. 如何判斷一個 \(k_0\) 是否符合條件?

    處理每一位的字首和,依次檢查每個長度為 \(k_0\) 的子串,\(O(N\log N)\)

  2. 如果 \(k_0\) 符合條件,則 \(k_1 = k_0 + 1\) 是否符合條件?

    \(s_i = a_i \mid a_{i + 1} \mid \cdots\mid a_{i + k_0 - 1}\)

    \(s_i' = s_i = a_i \mid a_{i + 1} \mid \cdots\mid a_{i + k_1} = s_i \mid s_{i + 1}\)

    由於 \(\forall i, j, \ s_i = s_j\),所以 \(\forall i, j, \ s_i' = s_j'\)

答案具有單調性,考慮二分,複雜度 \(O(N\log^2N)\)

C

長度為 \(n\) 的序列最多 \(n / 2 - 1\) 個區域性最大值。

是否能達到這個上界?

欽定 \(n / 2\) 個位置為區域性最大值,給這些位置按數值從大到小分配 \(n/2 + 1\cdots n\) ,給其他位置按數值從大到小分配 \(1\cdots n / 2\)

欽定位置的最小值可能為 \(n + 1\),其他位置的最大值也可能為 \(n + 1\),不好判斷。

如果欽定位置一定包含數值 \(n\) 呢?

欽定位置至少為 \(n + 1\),其他位置最大隻有 \(n\)

因此,只要在選定 \(n/2\) 個位置後,按上述策略分配即可。

由於區域性最大值兩兩不相鄰,不妨按照 \(n\) 所在位置的奇偶欽定全部奇數位或全部偶數位。

D

  1. 答案 \(m\) 一定是最大值 \(mx\) 的倍數。
  2. 最短子段長度不大於 \(n / k\)
  3. \(m\) 一定不大於 \(mx\)\(n / k\) 倍。

於是先花 \(n\) 次操作找到最大值 \(mx\)

再列舉 \(m\)\(mx\) 的幾倍,每輪不超過 \(k\) 次,總共不超過 \(n\) 次。

相關文章