AtCoder Regular Contest 061
文章目錄
- C - Many Formulas
- D - Snuke's Coloring
- E - Snuke's Subway Trip
- F - Card Game for Three
傳送門
C - Many Formulas
Score : 300300300 points 爆搜
直接dfsdfsdfs爆搜即可
復雜度O(2n)O(2^n)O(2n)
代碼
D - Snuke’s Coloring
Score : 400400400 points
考慮有標記的3×33×33×3的格子很少,所以直接暴力跑這些格子即可。
復雜度O(n)O(n)O(n)
代碼
E - Snuke’s Subway Trip
Score : 600600600 points 優化建圖 + dijkstradijkstradijkstra
經典建圖了,考的n2?>nn^2->nn2?>n建圖的優化
考慮對每個點延伸出max{ci}max\{ c_i\}max{ci?}個點,編號為1,2,...,max{ci}1,2,...,max\{c_i\}1,2,...,max{ci?},將這個點與延伸出的點連邊,邊權為111,讓后對于邊(a,b,c)(a,b,c)(a,b,c)我們將aaa延伸出的ccc號點與bbb延伸出的ccc號點連接,邊權為000,此時跑dikstradikstradikstra就是答案了。
但是細心的小伙伴就發現了,上面建圖不還是n2n^2n2嗎?考慮每個點延伸出來的每個點不一定有用,所以刪去沒用的,剩下有用的個數就是O(m)O(m)O(m)級別的了。
復雜度O(mlogn)O(mlogn)O(mlogn)
代碼
F - Card Game for Three
Score : 110011001100 points 組合數學 + 容斥dpdpdp
將若干操作考慮成一組操作序列,合法序列應該滿足如下要求:aaa出現恰好nnn次,bbb出現≤m\le m≤m,ccc出現≤k\le k≤k,序列長度范圍是[n,n+m+k][n,n+m+k][n,n+m+k],我們枚舉當前的序列長度,然后考慮組合數學求出方案。
假設當前枚舉的長度是iii,首先最后一次也就是第iii次一定是aaa,讓后剩下的n+m+k?in+m+k-in+m+k?i個位置任意,就有3n+m+k?i3^{n+m+k-i}3n+m+k?i種,所以我們需要先從i?1i-1i?1個中選n?1n-1n?1個,這個比較簡單就是(i?1n?1)\binom{i-1}{n-1}(n?1i?1?),此時剩下了n?in-in?i個位置,我們需要將b,cb,cb,c都填入這幾個位置,并且他們長度都滿足要求。一個比較暴力的做法就是枚舉bbb的長度,讓后判斷ccc是否符合條件,總方案就是(i?1n?1)?3n+m+k?i?∑x=0m[i?n?x<=k](i?nx)\binom{i-1}{n-1}*3^{n+m+k-i}*\sum_{x=0}^{m}[i-n-x<=k]\binom{i-n}{x}(n?1i?1?)?3n+m+k?i?∑x=0m?[i?n?x<=k](xi?n?),但是容易發現這個復雜度是O(n2)O(n^2)O(n2)的,網上有題解說像楊輝三角。。沒看出來,但是不難發現我們的問題就是從iii個里面選xxx個bbb,yyy個ccc,并且合法,那么定義f[i]f[i]f[i]代表長度為iii的時候合法的數量,轉移方程: f[i]=f[i?1]?2?(i?1m)?(i?1k)f[i]=f[i-1]*2-\binom{i-1}{m}-\binom{i-1}{k}f[i]=f[i?1]?2?(mi?1?)?(ki?1?),含義是當前第iii位置可以選b,cb,cb,c,這樣就是f[i?1]?2f[i-1]*2f[i?1]?2,但是當選bbb的時候如果i?1i-1i?1個位置里面有mmm個位置是bbb,那么就是不合法的需要減去,對于ccc同理。預處理出來之后答案就很好算了,iii位置的總方案就是(i?1n?1)?3n+m+k?i?f[i?n]\binom{i-1}{n-1}*3^{n+m+k-i}*f[i-n](n?1i?1?)?3n+m+k?i?f[i?n]
復雜度O(n)O(n)O(n)
代碼
總結
以上是生活随笔為你收集整理的AtCoder Regular Contest 061的全部內容,希望文章能夠幫你解決所遇到的問題。