第一屆河南省大學生程式設計競賽題型簡要分析

2021-08-26 21:18:17 字數 3051 閱讀 3553

概覽:

題數

型別幾何

圖論組合;分治

多重揹包 模擬

貪心深度優先搜尋(剪枝)

拓撲排序(有向圖)

【試題一】

練習處:

型別:幾何

解法:每個物資在每個圓形區域的有效性可以轉化為數學公式:

是圓心座標,

r是半徑,x、

y是落點座標)。

然後就是利用雙層迴圈,在每個圓中探測每個投放物資的座標點,有效則輸出

」yes」,

無效則輸出

」no」。

【試題二】

練習處:

型別:圖論

prim

和kruskal

。其中,

prim

演算法適合求邊稠密的最小生成樹,而

kruskal

演算法適合求邊稀疏的最小生成樹。本題的「很多基站之間不能直接建立通訊」說明邊是稀疏的,那麼選擇

kruskal

演算法。

先對各個邊按照權值進行公升序排序,然後把各個頂點各自歸為一組。依次取出各條邊的兩個頂點編號,判斷是不是同一組:若兩個頂點不在一組則可加入最小生成樹,標記這條邊加入了最小生成樹;若兩個頂點在一組(會構成迴路)則放棄這條邊。由於各條邊已經按照權值遞增排序,最後被標記為最小生成樹的一邊的所有邊的權值之和則為題中所求最小代價。最後計算最小生成樹中各條邊的權值總和並輸出。

【試題三】

密碼破譯

練習處:

型別:組合;分治

解法:對所有可能的鑰匙組合進行窮舉是個方法,但應該注意到:要求兩個鑰匙的長度之和恰好為此密碼的長度,那麼其中一把鑰匙的長度必定大於等於密碼長度的一半。先對鑰匙進行公升序排序,然後使用二分搜尋法定位到第乙個大於l/2(l為密碼的長度)的元素位置,得到相鄰兩鑰匙的長度之和

and,如果

and大於

l則向左端搜尋,否則向右端搜尋,遇到

and==l

,儲存兩把破譯的鑰匙的編號。搜尋完畢還沒有相符的

and,則無法找到破譯此密碼的鑰匙。最後,如果相符的

and只有乙個,則直接輸出;如果相符的

and有多個,則選擇起始編號最小的一組資料輸出。

【試題四】

練習處:

型別:應該是多重揹包問題

解法:多重揹包問題描述是這樣的,有

n種物品和乙個容量為

v的揹包。第

i種物品最多有

n[i]

件可用,每件費用是

c[i]

,價值是

w[i]

。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。參見:

多重揹包

。而現在只不過不求最大價值,要求裝滿揹包(飛機)。

【試題五】

練習處:

型別:模擬

解法:對於每乙個災區,如果沒有達到平均水平,則分別向左右(注意環形)搜尋到最近的超過平均水平的災區,並索取物資。另外一種思路是

不太確定其正確性。

此處有討論。

【試題六】time limit:1000ms

練習處:

型別:貪心

題意:有乙個勇士在行軍時有乙個習慣,跟著別人跑,還會跟著超過他的人跑,但是沒人出發他就不出發。那麼勇士何時能到達目的地?

解法:比勇士先出發的不用管了(一定不會跟在他們後面),勇士會跟著在他之後出發的並且最先到達目的地的士兵一塊到達。

【試題七】time limit:1000ms(這個提示原來是標準輸出之後的)
練習處:

型別:深度優先搜尋(剪枝)

題意:喬治拿來一組等長的木棒,將它們隨機地砍斷,使得每一節木棍的長度都不超過

50個長度單位。然後他又想把這些木棍恢復到為裁截前的狀態,但忘記了初始時有多少木棒以及木棒的初始長度。請你設計乙個程式,幫助喬治計算木棒的可能最小長度。

解法:對這些木棍逆序排序,然後假定最長的木棍為最優解,檢查是否可以砍斷為這些木棍,如果不行,長度加

1繼續檢查。檢查過程是:從這些木棍中選取第乙個(最長的)開始嘗試組合第一根棍子,如果不夠長,加入下一根,直到組合成功,接著組合下一根棍子。

【試題八】

練習處:

型別:拓撲排序(有向圖)

題意:對前

n個字母,輸入

m組確定他們之間的大小關係,從而判斷有沒有唯一的序列。

第一種:輸出,在前

t(t<=m)

已能確定乙個序列

第二種:不能確定唯一的序列

第三種:不存在拓撲排序

當所有關係式

輸入後無法排序

則輸出無法排序。

解法:

1、注意拓撲排序只在有向無環圖中有效,關鍵在於要在每次輸入關係後做一次有無環的判斷。

:如果已經輸入的有向圖中的點

,不存在入度為0的點

,則該有向圖存在迴路

:如果已經輸入的入度為

0的點大於乙個

,則該有向圖肯定不存在乙個可以確定的拓撲序列但並不妨礙拓撲排序,還要檢測是否已經出現了環(存在迴路)。 2

、還可以使用深度優先搜尋來實現拓撲排序,根據每個結點的結束訪問時間的降序對結點進行拓撲排序,如果在某個結點的擴充套件過程中發現反向邊,則出現了矛盾;否則對所得到的結點序列,進行一次遍歷,對於相鄰的結點檢測是否存在連線邊(存在則表示它們的順序已經可以確定),如果所有的相鄰結點都可確定順序,則這個序列是完全有序的,對於後面的輸入可以忽略;如果處理完所有的輸入還不能得到完全有序序列,則輸出序列順序不能確定。 3

、warshall

演算法(求二元關係的傳遞閉包),但時間複雜度為

o(n³)。

賽題見:

河南省第一屆程式設計競賽

試題三 密碼破譯 某組織欲破獲乙個外星人的密碼,密碼由一定長度的字串組成。此組織擁有一些破譯此密碼的長度不同的鑰匙,若兩個鑰匙的長度之和恰好為此密碼的長度,則此密碼被成功破譯。現在就請你程式設計找出能破譯此密碼的兩個鑰匙。標準輸入 第一行 nn 為鑰匙的個數 1 n 1000 第二行 l l 為密碼...

節能 河南省第六屆大學生程式設計競賽

dr.kong設計的機械人卡多越來越聰明。最近市政公司交給卡多一項任務,每天早晨5 00開始,它負責關掉zk大道右側上所有的路燈。卡多每到早晨5 00準會在zk大道上某盞路燈的旁邊,然後他開始關燈。每盞燈都有一定的功率,機械人卡多有著自覺的節能意識,它希望在關燈期間,zk大道右側上所有路燈的耗電量總...

河南省第七屆ACM大學生程式設計競賽總結

首先,想吐槽省賽各種改時間,各種推遲,各種沒隊名什麼的。對此表示非常的蛋疼!然後先流水賬一下全部過程吧 首先前一天的熱身賽,很酷的交了21次錯誤,就測試了一下系統環境,只有ce,wa,tle這三個返回值,額對了,當然還有乙個yes 然後表示解放軍資訊大學的飯很好吃!接著就是第二天的正式賽了,題目發下...