1. 程式人生 > 實用技巧 >AtCoder Beginnner Contest 178 題解

AtCoder Beginnner Contest 178 題解

A - Not

題面

直接輸出 \(1-x\) 即可。

B - Product Max

題面

發現答案一定是在 \(a\times c\)\(a\times d\)\(b\times c\)\(b\times d\) 中出現。

輸出它們四個中的最大值即為答案。

C - Ubiquity

題面

容斥一下,答案為 總方案數 - 0 或 9 沒有出現過的方案數

後面一塊可以繼續容斥,為 0 沒有出現的方案數 + 9 沒有出現的方案數 - 0 和 9 都沒有出現的方案數,也就是 \(2\times 9^n-8^n\)

最終答案即為 \(10^n-2\times 9^n+8^n\)

D - Redistribution

題面

\(dp_{i,j}\) 表示長度為 \(i\) 的序列和為 \(j\) 的方案數。

轉移時列舉第 \(i\) 位填的是數 \(k\),那麼轉移就是 \(dp_{i,j+k}+=dp_{i-1,j}\)

理論上會 TLE,可以開 O2 艹過去或者用字首和優化(?)。

貼一下官方題解

程式碼

E - Dist Max

題面

好題啊。

首先我們要知道,平面上兩點 \((x_1,y_1)\)\((x_2,y_2)\) 的曼哈頓距離等於 \((x_1-y_1,x_1+y_1)\)\((x_2-y_2,x_2+y_2)\) 的切比雪夫距離。這個可以通過去絕對值來證明。

\(\texttt{P.S.}\)

切比雪夫距離:\(\max(|x_1-x_2|, |y_1-y_2|)\)

也就是 \(\max(|x_1-y_1-(x_2-y_2)|,|x_1+y_1-(x_2+y_2)|)\)

不妨設 \(a_i\) 表示 \(x_i-y_i\)\(b_i\) 表示 \(x_i+y_i\)

那麼我們就是要求 \(\max(|a_1-a_2|,|b_1-b_2|)\)

也就是 \(\max(|a_i-a_j|,|b_i-b_j|)=\max(\max a_i-\min a_i,\max b_i-\min b_i)\)

這些都可以直接求,複雜度 \(\mathcal{O}(n)\)

官方題解

std

F - Contrast

題面

貪心。

有幾種方法,這裡直接貼別人的程式碼了 TNT。

官方題解

方法 1

方法 2