2021 年百度之星·程序设计大赛 - 初赛一
1001
題意:給出一個無向圖,其中邊有兩種,附魔和沒附魔的。初始在1號點,狀態為沒附魔,每次會等概率隨機挑選一條邊走,當經過附魔邊時,狀態會改變(附魔->沒附魔,沒附魔->附魔),問走k步后到達n號點且狀態為附魔的概率。
比賽時,我錯誤的認為走出每條路徑的概率都是相等的,一個反例如下:
?路徑1-2-5的概率為,而路徑1-3-5的概率為
首先講一下官方題解做法:
最終答案為:走k步到n且狀態為附魔的概率/任意走k步的概率
顯然任意走k步的概率為1,所以只需求出分子。我們發現,如果沒有狀態,是很容易求出1到n的概率,所以我們可以將狀態轉化到點上:將每一個點拆成兩個,附魔點和沒附魔點,代表當前的狀態。若一條邊時附魔邊,則將對應的一點的附魔點于另一點沒附魔點相連,若是普通邊,則將對應的附魔點和沒附魔點相連。
這樣轉化后,我們發現只需求出1號沒附魔點到n號附魔點的概率就行了。
復雜度
接下來是我比賽時的做法:
還是求走k步到n且狀態為附魔的概率,設數組表示從i到j,且滿足在j點是狀態為附魔的概率,表示從i到j的概率,但對在j點的狀態沒有限制。
考慮矩陣乘法中的一次轉移,枚舉了從i到j的一個中間點k,(轉移后的)可以直接加上,那么考慮,有兩種情況,從i到k時變成附魔,而從k到j狀態不變,概率為,對應的,另一種情況的概率為,兩種情況相加即可。
?復雜度同樣為
1003
題意:有n臺電腦,其中第k臺電腦壞了,有m個交換方式依次進行,問對于1~n,使得最后壞的電腦交換到這個位置,最少放棄幾次操作
我們可以定義一個狀態表示前i個操作,交換到j的最小代價(即最少放棄幾次操作)
對于每個交換,與其無關的剩下n-2個電腦是否放棄此次操作并無關系,所以為使代價最小,此次不放棄,即
而對于a,如果執行此次交換操作,那么代價為,而如果放棄,則代價為,取兩者較小值即可
利用滾動數組優化空間,復雜度為
總結
以上是生活随笔為你收集整理的2021 年百度之星·程序设计大赛 - 初赛一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机领域有哪些常见的比赛
- 下一篇: NBA著名球星介绍