華為軟挑切切實實的做了兩周,說實話這也是第一次打這種**比賽,最終的成績略顯遺憾,西北賽區的58名,因為今年沒有64強這一說法,所以沒有任何獎勵,希望明年有再來一次的決心勇氣,畢竟竹籃打水一場空太讓人不爽了。
成績附圖如下,第58名:我是起名廢團隊
今年的賽題首先讓人窒息的就是長達29頁的題目,光是讀題我就讀了一下午加一晚上。總結一下就是有幾萬輛車從不同的地點不同的時間出發,去往不同的地點。在這個過程中,有若干條道路供他們選擇,這些道路長度不同、車道數不同、同時有的車道是單向道,有的車道是雙向道。
如上圖所示,某個路口上有5000,5001,5010,5018四條道路,目前狀態時刻道路上的車輛如上所示,前面標有r代表右轉,標有l代表左轉,標有d則是直行,交通規則是:右轉讓左轉,左轉讓直行。
最後題目要求排程時間最短。(排程時間指從系統開始排程車輛到最後一輛車輛到達目的地)
拋開之外的各種複雜條件,這道題本質上就是一道求每個點到每個點之間的最短路徑的問題,所以我們組就先寫了一套floyd求最短路徑的演算法,實際測試時,因為發車時間過於頻繁,所以報錯結果總是顯示在某個路口車輛鎖死,鎖死的原因主要是因為在路口對面的兩個車輛互相等待。
為了避免鎖死,先嘗試了最基本的調參**,讓所有車輛的出發時間均勻起來,即系統中第i輛車/25,這樣一來果然不鎖死,我們就得到了 初步的結果:排程時間1367。穩穩佔據了一天的排行榜top1。
為了進一步避免車輛的死鎖現象,我們團隊又腦洞大開,想從道路的角度入手,每條道路上目前在跑的車輛數不超過該條道路負載的1/2,如果有車輛超過,就讓它的出發時間推遲一時間步,事實證明,這個想法可行,可這個結果是太不好了,跑下來兩張圖將近2600多秒。
沒辦法,我們只能嘗試新的思路,比如每輪車輛開始走最短路徑,但是對於走的道路多的車來說,我們給它加更長的距離,然後進入第二次道路選擇,這樣有的車就會換走別的稍微長一點的道路,依次迴圈5輪,同時在每一輪,都有一小部分車速快同時距離又短的車輛發車。這樣結果就達到了962秒。
後面,又對這個結果做了細化,雙向道路負載啊,之類的。結果並沒有更成功(sad),962秒就是我們練習賽最好的成績了。
至於判題器的問題,並沒有寫出來。。。。。
西北賽區靠調參進入32強的同學們分享了經驗。非常非常非常簡單…
當然我們知道這個思路也很無語,他們雖然沒有避免死鎖,但是他們每隔1000輛發一波車,然後休息20s,繼續發車,,,,我們也用這個思路在初賽完試了試,果然排程時間要快很多。。。。
至於寫了判題器還沒有進複賽的同學,好像也有很多,說起來也是非常慘了。。。所以說比賽既要看實力也要看運氣,今年有一位同學進了32強,也許是兩張圖用了不同的引數,導致成績被取消了。。。這種小聰明也不可取。
最後,提醒自己和後來的人,一定要考慮資料規模的擴大性,練習賽3周的資料提供是10240輛車,最終初賽比賽資料是60440輛車。這導致了我們的演算法相當於線性增加,比如962乘5.3約等於5098秒,但是實際上很多人大概只增加3倍。最終西北賽區的32強守門員成績是3177秒。
很多和我們一樣練習賽排名比較靠前的人,也掉的非常慘,甚至掉出了64強,就是因為資料規模的擴大,他們的演算法線性增加。
所以說,練習賽成績不是特別重要,保持在32強內即可,調參不是重點,關鍵還是要有乙個好的思路,以及資料規模擴充套件式演算法的實操性。這樣才能初賽笑到最後。(華為也把這叫大浪淘金)
最後,感謝師兄師姐,邀請我參加比賽~!還是有很多收穫 的。
華為軟體精英挑戰賽總結
我們的成員分工 1 負責除錯 糾錯和上傳 2 負責查詢演算法思路 3 負責查詢演算法並且寫 框架 步驟 1 通過各個同學的專長進行分工,如上所示,確定一有思路就開小組會議討論。2 3號同學在網上查詢到乙個最基本的直連程式,該程式有錯誤,需要修改。3 1號同學同過3號同學給的直連 進行除錯和改錯,與此...
華為軟體精英挑戰賽總結
賽題連線 總體來看,是乙個np hard問題。我們隊的解題思路是 1 隨機選取伺服器的位置,用遺傳演算法尋優,那麼遺傳演算法中的判斷運算元就是第二步 2 在伺服器位置固定的情況下,利用最小費用最大流演算法計算總費用。該演算法思路詳見 其中求帶負權有向圖最短路,用到了fpga演算法,其實就是b ell...
2017華為軟體精英挑戰賽總結
這麼久了還是想寫個部落格,其實複賽第五沒有想象中那麼遺憾,雖然那天晚上自己還是比較傷心。回想整個過程,自己的 確實沒有超哥,凱神優秀。從費用流輸掉的那個acm青島站,必須要從費用流贏回來。我到底算不算超越了自己?我覺得只是比以前勇敢了 打acm時調不出來時經常孤獨,失望。但是這次我1個多月一直堅持打...