AtCoder Beginner Contest 184


AC代碼

A - Determinant

輸入輸出。

B - Quizzes

簡單模擬。

C - Super Ryuma

分類討論,萬萬沒想到這題是花時間最多的。

  • 一步可達:滿足題目中的條件。
  • 兩步可達:
    • 走一次對角線后歐幾里得距離小於三,此時可以直接枚舉和\((r_2, c_2)\)歐幾里得距離小於三的點,然后看是否能夠通過一次走對角線到達\((r_1, c_1)\)
    • 走兩次對角線:就是過\((r_1, c_1)\)的對角線和過\((r_2, c_2)\)的對角線有整數交點。
  • 不然必定三步可達,具體就是先走到對角線交點附近,在走到過\((r_2, c_2)\)的對角線上,最后到達\((r_2, c_2)\)

D - increment of coins

概率DP。

由於參數都很小,所以整了個\(O(n^3)\)的DP。

\(dp_{i, j, k}\)表示三種硬幣數量分別為\(i, j, k\)的概率,初始時只有\(dp_{a, b, c} = 1\),其余皆為零。

一次操作時,選金幣的概率為\(\frac{i}{i + j + k}\),選了之后轉移到\(dp_{i + 1, j ,k}\)。所以\(dp_{i + 1, j, k} += dp_{i, j, k} \times \frac{i}{i + j + k}\)

若金幣數量達到100則結束,根據期望的定義\(E = \sum_{i = b} \sum_{j = c} (100 + i + j - a - b - c) \times dp_{100, i, j}\)

銀幣和銅幣同理。

E - Third Avenue

經典優先隊列+BFS。

就是多寫通過傳送轉移的部分。具體就是如果是第一次走到小寫字母\(ch\)的格子,就枚舉一遍所有\((i, j)\),看是否能夠傳送到\((i, j)\)。如果不是第一次走到,那么通過傳送必不可能達到更優的答案,所以這個時候只考慮上下左右的轉移就可以了。

時間復雜度\(O(26nm)\)

F - Programming Contest

暴力+trick優化。

將這\(n\)個數等分成兩部分。對於其中的一部分,暴力枚舉\(2^{n_1}\)種情況,然后就得到了前\(n_1\)個數可能得到的所有結果,用數組\(t_1\)保存。

特別的,如果用的遞歸枚舉,還可以加剪枝。

第二部分同理。

\(t_1\)\(t_2\)升序排序,然后就是\(t_1\)中拿一個數,\(t_2\)拿一個數,問組成的最大的不超過\(T\)的數是多少。這個就是比較經典的題了,二分或者雙指針亂寫完事。

時間復雜度\(O(2^{20} \log 2^{20})\),主要是排序的復雜度。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM