第一題(共兩題100分)站點統計(50分)
題目描述:
s 1 2 3 4
1 / 4 0 3
2 3 / 4 5
3 2 2 / 2
4 6 1 4 /
其中與s(site)同行和同列的數字都表示站點號,其他每個數字表示乙個站點到另乙個站點的超文字鏈結數。如果站點a有到另乙個站點b的直接鏈結或間接(指通過乙個或多個直接鏈結)鏈結,則稱站點a有到站點b的訪問關係,或稱站點b可以被站點a訪問到。例如,上面描述了乙個有4個站點鏈結關係的站點集合,第一行 / 4 0 3 表示站點1到站點1,2,3,4的超文字鏈結數。
請編寫程式:
1) 將乙個有n個站點的集合劃分成滿足下面所有條件的站點子集(這些子集的union組成了該n個站點集合):
a) 當任一子集中的站點數大於1時,該子集內至少存在乙個站點有到該子集內所有其他站點的訪問關係;
b) 當任一子集中的站點數大於1時,該子集內的任一站點至少可以被該子集內的某一站點訪問到;
c) 兩個不同子集中的任意兩個站點之間不存在任何訪問關係。
2) 裁減這些子集內的站點之間現有的鏈結關係,使得被裁減後的各子集內的站點依然可以滿足上述所有條件,同時使得子集內的站點之間的鏈結總數相加之和為最小。
假如上面的站點集合是這n個站點集合中的乙個子集,它滿足了條件a):4可以訪問到3,也可以訪問到2和1;也滿足了條件b):站點4可以被站點3訪問到,等等。對該站點集合進行裁減使其仍然滿足條件a和b,並使得其鏈結總數之和為最小的結果為:
s 1 2 3 4
1 / 0 0 0
2 0 / 0 0
3 2 0 / 2
4 0 1 4 /
這裡,站點4可以訪問到站點3和2,站點4也可以訪問到站點1(通過站點3間接訪問);此外,站點3可以訪問到站點4;最小鏈結總數相加為2+2+1+4=9。
輸入資料:
程式讀入已被命名為sites.txt的完全如上所示的n*n矩陣的輸入資料文字檔案,n不大於10萬(n即為行數和列數),輸入檔案的每一行的列和列之間用乙個/t分隔,行和行之間用/n分隔。
輸出資料:
1 2 3 4 9
如果輸入資料無滿足題目要求的子集存在,則輸出none。
評分標準:
在結果正確的前提下,會考慮程式的執行時間。我們會用兩個不同的輸入資料檔案(乙個簡單乙個複雜)進行測試,簡單的輸入資料產生的程式輸出結果如果正確,獲該題滿分的30%即15分(不處理執行時間,除非因程式錯誤引起的超時執行);複雜的輸入資料產生的程式輸出結果如果正確,獲50%即25分,執行時間滿分為20%即10分,按各自程式的執行時間在所有參賽選手的程式的執行時間中所佔位置獲得相應比例。請仔細閱讀並遵守"輸入資料"和"輸出資料"中的格式要求,如不符合要求,我們的自動評分程式可能會判定程式不正確。
第二題(共兩題100分)決策系統(50分)
題目描述:
乙個智慧型決策系統可以由規則庫和事實庫兩部分組成,假定規則庫的形式為:
ri c1 & c2 & … & cn->a
表示在條件c1,c2,… 和cn都滿足的前提下,結論a成立(即採取行動a);ri表示這是規則庫中的第i條規則。事實庫則由若干為真的條件(即命題)所組成。
對乙個新的待驗證的命題q,可使用資料驅動或目標驅動兩種推理方式之一,來確認它是否可由某規則庫和事實庫推出:
1) 資料驅動的推理是指從事實庫開始,每次試圖發現規則庫中某條能滿足所有條件的規則,並將其結論作為新的事實加入事實庫,然後重複此過程,直至發現q是乙個事實或沒有任何新的事實可被發現;
2) 目標驅動的推理是指從目標假設q出發,每次試圖發現規則庫中某條含該假設的規則,然後將該規則的前提作為子目標,確認這些子目標是否和事實庫中的事實相匹配,如果沒有全部匹配,則重複此過程,直至發現新的子目標都為真或不能再驗證子目標是否為真。
例如,乙個規則庫為:
r1 x & b & e -> y
r2 y & d -> z
r3 a->x
事實庫為: a
b c
d e
如果想知道命題z是否為真,資料驅動的推理是從a b c d e開始,依次匹配規則r3(得到新事實x),r1(得到新事實y)和r2,得到z為真的事實;目標驅動的推理是從假設目標z開始,依次匹配規則r2(得到新的子目標y),r1(得到新的子目標x)和r3,得到假設z為真的結論。
請編寫程式正確、高效的實現這兩種推理方式。
輸入資料:
程式需要兩個命令列引數:
1) 《推理方式》:data|goal,分別表示程式應採用資料驅動的推理或目標驅動的推理;
2) 《命題》:如z。
此外,程式還需讀入已被命名為rules.txt的規則庫和已被命名為facts.txt的事實庫。規則庫中的規則可能在千量級,按r1,r2,r3…依次按行排列的,每行一條規則,每條規則都以ri c1 & c2 & … & cn->a的形式表示,ri和c1之間有1個或多個空格,ci和&之間,cn和->之間,以及->和a之間可以有0或多個空格。事實庫中的各事實之間用1個/n隔開,每行乙個事實。
輸出資料:
如果z能被推理為真,則輸出:
true 《推理方式:data或goal> 《用空格隔開的規則序列:以在所輸入的推理方式下,推出該命題為真的規則被啟用的順序排列》
例如:true goal r2 r1 r3
如果z不能被推理為真,輸出:
uncertain
評分標準:
在結果正確的前提下,會考慮程式的執行時間。我們會用兩組不同的輸入資料檔案(乙個簡單乙個複雜)進行測試,簡單的輸入資料產生的程式輸出結果如果正確,獲該題滿分的20%即10分(不處理執行時間,除非因程式錯誤引起的超時執行);複雜的輸入資料產生的程式輸出結果如果正確,獲40%即20分,執行時間滿分為40%即20分,按各自程式的執行時間在所有參賽選手的程式的執行時間中所佔位置獲得相應比例。兩種推理方式各佔一半的分數。請仔細閱讀並遵守"輸入資料"和"輸出資料"中的格式要求,如不符合要求,我們的自動評分程式可能會判定程式不正確。
百度之星程式設計大賽題目
輸入格式 輸入的第一行只有乙個整數n,表示購置水果的組數。接下來的n行表示水果的到達時間 取走時間 時間用1200到1900之間的正整數表示,保證取走時間大於到達時間 剩下的字串以空格分割每一種水果。如 1400 1600 雪梨 水蜜桃 表示下午兩點到四點 包含兩點和四點這兩個時間點 雪梨和水蜜桃會...
2011百度之星程式設計大賽初賽A
第一題 圖示排列 研究發現,同乙個開發者開發的程式的圖示有很大的相似性。如果把同乙個開發者開發的應用放在一起,使用者很快就會厭倦相似的圖示,如果把這些圖示穿插擺放效果就會好很多。現在工程師想給使用者推薦來自m個開發者的n個應用,在推薦的時候這些應用的圖示將排成整齊的一行展示給使用者,相鄰兩個圖示之間...
2018 「百度之星」程式設計大賽 初賽(A)
第二題還算手穩 手快?最後勉強擠進前五百 期間看著自己從兩百多掉到494名 1001 度度熊拼三角 hdoj 6374 簽到題 題意 給n根木棒 求可以拼出的周長最長的三角形 可以用貪心的思想做 對所有的木棒長度進行排序 取最長的三根進行判斷是否可以組成三角形 若不能 捨去最長的一根 每次都選擇相鄰...