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.
會了,鴿一下