CSP2024-11 + 同餘最短路

Lu_xZ發表於2024-08-28

同餘最短路

P3403 跳樓機

題意:給出正整數 \(x, y, z \le 10^5\) 和值域限制 \(h\),求 \(1 \sim h\) 中形如 \(ax + by + cz\) 的數的個數,其中 \(a, b, c\) 非負。

我們把最後答案根據模 \(c\) 分類:

那麼對於每一個同餘類 \(i\),問題轉化為找 \(p = by + cz \equiv i \bmod c\) 的最小 \(p\)

假設已經累加到了 \(v\),此時可以花費 \(y\) 到達 \((v + y) \bmod x\)

所求的 \(p\) 就是起點到 \(i\) 的最短路。點數和邊數都是 \(O(n)\),邊權為正,dijstra 跑最短路。

submission

[ABC077D] Small Multiple

題意:給定正整數 \(n\),求 \(n\) 的倍數中最小的數位和。

任意數可以被如下過程生成:

  • \(+ 1\),同時數位和加一。
  • \(\times 10\),數位和不變。

因此對模意義下的 \(n\) 個點連出兩條邊,\(+1\) 邊權為 \(1\)\(\times 10\) 邊權為 \(0\),01BFS 線性求最短路。

不會出現加一操作連續出現 10 次的情況,因為直接乘 10 代價更小。

submission

P2662 牛場圍欄

題意:給定 \(n\) 種長度的木棍(無限根),求出這些木棍不能拼出的最大長度。

取排序後最小的長度 \(a_1\) 為模數。

還是第一題的套路,求出與 \(i\) 同餘的最小的 \(d_i = \sum_{j = 2}^{n} a_jx_j\) ,只不過這題每個點需要連出去 \(n - 1\) 條邊。

時間複雜度 \(O(n^2\log n)\),對於每一種剩餘類來說,其不能到達的最大長度等於 \(d_i - a_1\)

submission

P2371 [國家集訓隊] 墨墨的等式

題意:給定 \(n, [a_n], l, r\),求有多少 \(x \in [l, r]\) 使得 \(x = \sum a_ix_i\) 存在非負整數解。

還是套路,選最小的 \(a\) 作為模數,跑最短路,對每個剩餘類依次考慮貢獻。

submission

P9140 [THUPC 2023 初賽] 揹包

題意:

CSP2024-11

相關文章