華為軟體精英挑戰賽2016題解

來源:互聯網
上載者:User

標籤:

代碼:https://github.com/jinhang/2016_Huawei_SoftWareMatch 前言 賽題源自“未來網路”業務發放中的路由計算問題。算路問題屬於基礎演算法問題,在圖論、網路、交通等各個方面均有著廣泛的研究與運用,裡面不乏一些經典的演算法,例如最短路中的廣度優先搜尋,Dijkstra演算法等。網路算路問題的更優演算法實現對於網路資源高效配置具有重要價值。 本次大賽分為初賽複賽總決賽三個主要階段,當前為總決賽/複賽階段。

總決賽/複賽賽題描述 1 問題定義 給定一個帶權重的有向圖G=(V,E),V為頂點集,E為有向邊集,每一條有向邊均有一個權重。對於給定的頂點s、t,以及V的子集V’和V’’,尋找從s到t的兩條不成環的有向路徑P’和P’’,使得P’經過V’中所有的頂點,而P’’經過V’’中所有的頂點(對P’經過V’中頂點的順序以及P’’經過V’’中頂點的順序不做要求)。
若不同時存在這樣的兩條有向路徑,則輸出無解,程式已耗用時間越短,則視為結果越優; 若同時存在這樣的兩條有向路徑,則輸出得到的兩條路徑,按下列優先順序從高到低評價結果優劣:
1、 路徑P’和P’’重合的有向邊個數越少,則視為結果越優;
2、 在兩條路徑重合的有向邊個數一樣的情況下,兩條路徑權重總和越少,則視為結果越優;
3、 在上述兩個指標一樣的情況下,程式已耗用時間越短,則視為結果越優。
說明: 1)圖中所有權重均為[1,100]內的整數;
2)任一有向邊的起點不等於終點;
3)串連頂點A至頂點B的有向邊可能超過一條,其權重可能一樣,也可能不一樣;
4)該有向圖的頂點不會超過2000個,每個頂點出度(以該點為起點的有向邊的數量)不超過20;
5)V’和V’’中元素個數均不超過100,交集為空白,且不包含起始頂點s和終止頂點t;
6)從s到t的不成環有向路徑P是指,P為由一系列有向邊組成的從s至t的有向連通路徑,且不允許重複經過任一頂點;
7)路徑的權重是指所有組成該路徑的所有有向邊的權重之和(重複邊的權重應分別在兩條路徑中各計算一次)。
2 輸入與輸出 輸入檔案格式 以兩個.csv檔案(csv是以逗號為分隔字元的文字檔)給出輸入資料,一個為圖的資料(G),一個為需要計算的路徑資訊(s,t,V’,V’’)。檔案每行以分行符號(ASCII’\n’即0x0a)為結尾。

1)圖的資料中,每一行包含如下的資訊:
LinkID,SourceID,DestinationID,Cost
其中,LinkID為該有向邊的索引,SourceID為該有向邊的起始頂點的索引,DestinationID為該有向邊的終止頂點的索引,Cost為該有向邊的權重。頂點與有向邊的索引均從0開始編號(不一定連續,但用例保證索引不重複),頂點索引範圍在[0,2000),有向邊索引範圍在[0,40000)。
2)路徑資訊中,只有一行如下資料:
DemandID,SourceID,DestinationID,IncludingSet
其中,DemandID裡面第一行為1,第二行為2,表示路徑索引,1表示P’,2表示P’’,SourceID為起始頂點s的索引,DestinationID為終止頂點t的索引,IncludingSet表示必須經過的頂點集合V’或V’’,其中不同的頂點索引之間用“ | ”分割,如果該路徑沒有必經頂點要求,則此處輸入NA。
輸出檔案格式 輸出檔案同樣為一個.csv 檔案。
1)如果該測試案例存在滿足要求的有向路徑P’和P’’,則輸出兩行資訊,第一行按P’經過的有向邊順序,依次輸出有向邊的索引,索引之間用“ | ”分割;第二行按P’’經過的有向邊順序依次輸出有向邊的索引,索引之間用“ | ”分割;
2)如果該測試案例不同時存在兩條滿足要求的有向路徑P’和P’’,則只輸出一行資訊:NA;
3)每一行只允許輸出最多一條有向路徑,以分行符號0x0a結尾。
3 單個用例的評分機制 有解用例的排名機制 按下面流程對參賽者結果進行排名: Step1: 對於提交的結果,進行合法性檢驗(詳見題目描述); Step2: 程式已耗用時間不得超過10s; 若不滿足上述的結果則本用例得分為0;

Step3: 路徑P’和P’’重合的有向邊個數(不考慮權重)越少,排名越優; Step4: 在路徑P’和P’’重合的有向邊個數一樣的情況下,計算P’和P’’的權重和,權重越小,排名越優; Step5: 在上述兩個指標一樣的情況下,用程式已耗用時間細化排名,時間越短,排名越優。 無解用例的排名機制 按下列流程對參賽者結果進行排名: Step1: 對於提交的結果,驗證是否識別出該用例無解,若無法識別或者程式已耗用時間超10s,則本用例得分為0; Step2: 用程式的已耗用時間進行排名,時間越短,排名越優。 單個用例的評分標準如下: 根據上面排名流程得到的排名,使用標準分計分(排名第一的提交者為100分)。
若所有人均未得到正確結果,則所有人均得分為0。
4 網站系統判分機制 複賽階段官方網站開放接收複賽程式提交,系統平台會使用N個測試案例線上判題,參賽者對於每個測試案例都會得到一個百分制分數,使用算術平均分為該參賽者的最終得分,並展示在各地區複賽熱門排行榜中。
特別說明:複賽階段的線上判題評分及排行僅供參賽者參考,不納入最終複賽成績。
5 簡單用例說明


在如所示的有向圖中,我們會得到下面的有向圖資訊: 0,0,1,1
1,1,2,1
2,2,3,1
3,1,4,1
4,4,3,1
5,0,5,1
6,5,2,1
如果此時需要尋找從0到3的路徑P’和P’’,且P’必須經過頂點1,P’’必須經過頂點2,相應的路徑資訊檔內容為: 1,0,3,1
2,0,3,2
對於該用例,可以找到如下兩組解:
0|1|2
5|6|2
以及
0|3|4
5|6|2
由於第一組解兩條路徑的重合邊個數為1,第二組解兩條路徑的重合邊個數為0。所以此時最優解應該是0|3|4,5|6|2。
6 複賽賽制說明
各地區晉級複賽隊伍為32-36隊,複賽採用分地區現場競賽的形式開展,共分成三個小階段: 1、 排位賽:地區現場複賽當天,各地區將通過一個官方用例對進入複賽隊伍提交的程式進行判題評分並排序,排序前8名的隊伍將作為下一個階段分組賽8個小組的種子隊,其餘隊伍通過抽籤方式進行分組。
2、 分組賽:地區共分8個小組,各小組採用單迴圈對戰方式競賽,通過積分(每場比賽勝得3分,平各得1分,負得0分)進行小組排序,排序前2名的隊伍小組出線進入下一階段的淘汰晉級賽。
3、 淘汰晉級賽:各小組出線隊伍組成16強,分成上下半區進行兩兩對戰淘汰晉級賽,分為“1/8決賽→1/4決賽→半決賽→決賽”,最後決出地區4強進入全國總決賽。
兩隊對戰規則說明: 1、 複賽分組賽和淘汰晉級賽均採用兩隊對戰的形式,每場對戰9局5勝。(分組賽勝積3分,負積0分,平各積1分,最後排序積分相同情況下,排位賽成績靠前者勝出;淘汰賽出現平局,則由官方提供用例“加時賽”決出勝負);
2、 對戰雙方(如紅方、藍方)各需提供2個自設計用例,官方提供5個用例,共9個用例分9局進行對戰,用例發放順序為:紅方1→藍方1→紅方2→藍方2→官方1→官方2→官方3→官方4→官方5;
3、 每局對戰中,如由於己方提供用例導致自己計算不出,則該局對方自動勝出,其餘依據“單個用例評分機制”判定勝負。
7 總決賽賽制說明 各地區複賽前四名共32支隊伍晉級總決賽,總決賽採用現場競賽的形式開展,共分成三個小階段: 1、 排位賽:總決賽當天,組委會將通過兩個官方比賽用例對進入總決賽賽隊伍提交的程式進行判題評分並排序。各參賽隊根據排位賽評分排名進行分檔,1-8名定為種子隊(第一檔),9-16名為第二檔,17-24名為第三檔,25-32名為第四檔。排位賽排名僅供分組賽抽籤使用,不影響參賽隊伍最終排名;
2、 分組賽:全國32強共分8個小組,分組過程採用抽籤進行,種子隊抽籤至A1-H1位置,第二檔隊伍抽籤至A2-H2位置,第三檔隊伍抽籤至A3-H3位置,第四檔隊伍抽籤至A4-H4位置,形成小組賽分組。各小組採用單迴圈對戰方式競賽,通過積分(每場比賽勝得3分,平各得1分,負得0分)進行小組排序,排序前2名的隊伍小組出線進入下一階段的淘汰晉級賽。如遇積分相同情況,將根據“淨勝局多-勝負關係佔優-上傳時間早”的優先順序進行排序;
3、 淘汰晉級賽:各小組出線隊伍組成16強,分成上下半區進行兩兩對戰淘汰晉級賽,分為“1/8決賽→1/4決賽→半決賽→決賽”,最後決出全國總冠軍。
兩隊對戰規則說明: 1、 總決賽分組賽和淘汰晉級賽均採用兩隊對戰的形式,每場對戰9局5勝。(分組賽允許出現平局,淘汰賽出現平局,則 “上傳時間早”的隊伍勝出);
2、 對戰雙方(如紅方、藍方)各需提供2個自設計用例,官方提供5個用例,共9個用例分9局進行對戰,用例發放順序為:紅方1→藍方1→紅方2→藍方2→官方1→官方2→官方3→官方4→官方5;
3、 每局對戰中,如由於己方提供用例導致自己計算不出,則該局對方自動勝出。官方提供用例如雙方均未計算出正確路徑,則雙方均不得分。其餘依據“單個用例評分機制”判定勝負。
8 關於參賽隊自行產生對戰測試案例的說明 由官方在複賽階段提供若干完整用例作為選手產生用例的素材,選手可自行編輯用例(如刪增頂點、有向邊、必經頂點、修改起始終止頂點等),或完全自行設計用例,只需保證用例符合題目要求且有解。官方將通過大賽網站給進入複賽的參賽隊開放用例設計工具。 9 總決賽/複賽注意事項 1、 核心演算法禁止使用第三方代碼;
2、 如參考有論文或第三方代碼,必須在readme檔案中提供來源說明;
3、 針對所有用例必須使用同一個演算法和同一套代碼實現。


初賽賽題描述 1 問題定義 給定一個帶權重的有向圖G=(V,E),V為頂點集,E為有向邊集,每一條有向邊均有一個權重。對於給定的頂點s、t,以及V的子集V‘,尋找從s到t的不成環有向路徑P,使得P經過V‘中所有的頂點(對經過V‘中節點的順序不做要求)。
若不存在這樣的有向路徑P,則輸出無解,程式已耗用時間越短,則視為結果越優;若存在這樣的有向路徑P,則輸出所得到的路徑,路徑的權重越小,則視為結果越優,在輸出路徑權重一樣的前提下,程式已耗用時間越短,則視為結果越優。
說明: 1)圖中所有權重均為[1,20]內的整數;
2)任一有向邊的起點不等於終點;
3)串連頂點A至頂點B的有向邊可能超過一條,其權重可能一樣,也可能不一樣;
4)該有向圖的頂點不會超過600個,每個頂點出度(以該點為起點的有向邊的數量)不超過8;
5)V‘中元素個數不超過50;
6)從s到t的不成環有向路徑P是指,P為由一系列有向邊組成的從s至t的有向連通路徑,且不允許重複經過任一節點;
7)路徑的權重是指所有組成該路徑的所有有向邊的權重之和。
2 輸入與輸出 輸入檔案格式 以兩個.csv 檔案(csv 是以逗號為分隔字元的文字檔)給出輸入資料,一個為圖的資料(G),一個為需要計算的路徑資訊(s,t,V‘)。檔案每行以分行符號(ASCII‘\n‘即0x0a)為結尾。

1)圖的資料中,每一行包含如下的資訊:
LinkID,SourceID,DestinationID,Cost
其中,LinkID 為該有向邊的索引,SourceID 為該有向邊的起始頂點的索引,DestinationID為該有向邊的終止頂點的索引,Cost 為該有向邊的權重。頂點與有向邊的索引均從0 開始 編號(不一定連續,但用例保證索引不重複)。
2)路徑資訊中,只有一行如下資料:
SourceID,DestinationID,IncludingSet
其中,SourceID 為該路徑的起點,DestinationID 為該路徑的終點,IncludingSet 表示必須經過的頂點集合V‘,其中不同的頂點索引之間用‘|‘分割。
輸出檔案格式 輸出檔案同樣為一個.csv 檔案。
1)如果該測試案例存在滿足要求的有向路徑P,則按P 經過的有向邊順序,依次輸出有向邊的索引,索引之間用‘|‘分割;
2)如果該測試案例不存在滿足要求的有向路徑P,則輸出兩個字元NA;
3)只允許輸出最多一條有向路徑。
3 單個用例的評分機制 有解用例的排名機制 按下面流程對參賽者結果進行排名: Step1: 對於提交的結果,進行合法性檢驗(詳見題目描述); Step2: 程式已耗用時間不得超過10s; 若不滿足上述的結果則本用例得分為0;

Step3: 計算提交的路徑的權重,權重越小,排名越優; Step4: 在權重相同的結果裡,用程式已耗用時間進行排名,時間越短,排名越優。 無解用例的排名機制 按下列流程對參賽者結果進行排名: Step1: 對於提交的結果,驗證是否識別出該用例無解,若無法識別或者演算法已耗用時間超10s,則本用例得分為0; Step2: 用程式的已耗用時間進行排名,時間越短,排名越優。 單個用例的評分標準如下: 根據上面排名流程得到的排名,使用標準分計分(排名第一的提交者為100分)。
若所有人均未得到正確結果,則所有人均得分為0。
4 最終得分機制 平台會使用N個測試案例判題,該N個測試案例分為初級、中級、進階三個等級,參賽者對於每個測試案例都會得到一個百分制分數,使用加權平均分(初級權重為0.2,中級權重為0.3,進階權重為0.5)作為該參賽者的最終得分。
特別說明:在比賽初期,平台只放出初級、中級的測試案例,故此時滿分為50分,在比賽後期,才會放出進階測試案例(具體發放時間會在網站公告通知),此時滿分才為100分,請各位參賽者注意。
5 簡單用例說明


在如所示的有向圖中,我們會得到下面的有向圖資訊: 0,0,1,1
1,0,2,2
2,0,3,1
3,2,1,3
4,3,1,1
5,2,3,1
6,3,2,1
如果此時需要尋找從0到1的路徑,且必須經過頂點2和3,我們會得到如下的路徑資訊: 0,1,2|3 對於該用例,可以找到如下兩條可行路徑:
1|5|4
2|6|3
由於第一條路徑的權重為4,第二條路徑的權重為5,所以此時最優解應該1|5|4。


運行環境 CPU:Intel Xeon CPU E5-2690 V2 @ 3.00GHz
記憶體:2G
核心:單核
編譯器:gcc 4.8.4;java 1.7.0_95;
作業系統:linux Ubuntu 14.04.3 LTS 64位,核心版本 Linux version 3.13.0-24-gineric
SDK:為方便選手做題,分別提供c++(相容c)和Java SDK包供參考(見賽題下載包),詳細描述資訊請見SDK目錄下的readme.txt。

華為軟體精英挑戰賽2016題解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.