abc353 | 賽後vp

你说得太对辣發表於2024-05-13

a.

模擬。

b.

模擬。

c.

先求出式子 \(\sum_{i=1}^{n} \sum_{j=i+1}^{n} a[i] + a[j]\),這個很顯然為 \(\sum_{i=1}^{n} (n-1)a[i]\),記為 \(ans\)。再考慮取模。發現,只有兩兩的和大於等於 \(10^8\) 才會對答案有影響,所以對於每一個 \(a[i]\),求有多少 \(a[j] + a[i] \ge 10^8\),減去相應貢獻即可。有一些細節。

提交記錄

d.

\(sz[i]\)\(a[i]\) 的位數。對於每個數 \(a[i]\),都為前面 \(i-1\) 個數貢獻了 \(a[i]\),為後面的每個數貢獻了 \(a[i] \times 10^{sz[j]}\)。因此答案即為 \(\sum_{i=1}^{n} (i-1)\times a[i] + \sum_{i=1}^{n} \sum_{j=i+1}^{n} a[i] \times 10^{sz[j]}\)。這個從後往前列舉可以 \(O(n)\) 求出。

提交記錄

e.

遇到這種題,首先考慮把他放到trie上。對於兩個字串,他們的最長公共字首為兩個串在字典樹上的共同經過的點的個數。因此對於樹上的每個點,記它被經過的次數為 \(res[i]\),它對答案做出的貢獻即為 \(res[i]\times(res[i] - 1)\)。最終的答案為 \(\sum_{i=1}^{cnt} res[i]\times (res[i]-1) / 2\)

提交記錄

f.

這場f有點噁心,先鴿一下。

g.

會了,鴿一下

相關文章