?第一題: ?某次科研調查時得到了n個自然數,每個數均不超過1500000000(1.5*109)。已知不相同的數不超過10000個,現在需要統計這些自然數各自出現的次數,并按照自然數從小到大的順序輸出統計結果。
?
解題過程: 直接sort快拍然后掃描一遍即可。
第二題: ?在初賽普及組的“閱讀程序寫結果”的問題中,我們曾給出一個字符串展開的例子:如果在輸入的字符串中,含有類似于“d-h”或“4-8”的子串,我們就把它當作一種簡寫,輸出時,用連續遞增的字母或數字串替代其中的減號,即,將上面兩個子串分別輸出為“defgh”和“45678”。在本題中,我們通過增加一些參數的設置,使字符串的展開更為靈活。具體約定如下: (1)遇到下面的情況需要做字符串的展開:在輸入的字符串中,出現了減號“-”,減號兩側同為小寫字母或同為數字,且按照ASCII碼的順序,減號右邊的字符嚴格大于左邊的字符。 (2)參數p1:展開方式。p1=1時,對于字母子串,填充小寫字母;p1=2時,對于字母子串,填充大寫字母。這兩種情況下數字子串的填充方式相同。p1=3時,不論是字母子串還是數字子串,都用與要填充的字母個數相同的星號“*”來填充。 (3)參數p2:填充字符的重復個數。p2=k表示同一個字符要連續填充k個。例如,當p2=3時,子串“d-h”應擴展為“deeefffgggh”。減號兩側的字符不變。 (4)參數p3:是否改為逆序:p3=1表示維持原有順序,p3=2表示采用逆序輸出,注意這時仍然不包括減號兩端的字符。例如當p1=1、p2=2、p3=2時,子串“d-h”應擴展為“dggffeeh”。 (5)如果減號右邊的字符恰好是左邊字符的后繼,只刪除中間的減號,例如:“d-e”應輸出為“de”,“3-4”應輸出為“34”。如果減號右邊的字符按照ASCII碼的順序小于或等于左邊字符,輸出時,要保留中間的減號,例如:“d-d”應輸出為“d-d”,“3-1”應輸出為“3-1”。
?
解題過程: 按題目描述模擬就好,只要細心就不會錯。?
?
第三題: 帥帥經常跟同學玩一個矩陣取數游戲:對于一個給定的n*m的矩陣,矩陣中的每個元素aij均為非負整數。游戲規則如下: 1. 每次取數時須從每行各取走一個元素,共n個。m次后取完矩陣所有元素; 2. 每次取走的各個元素只能是該元素所在行的行首或行尾; 3. 每次取數都有一個得分值,為每行取數的得分之和,每行取數的得分 = 被取走的元素值*2^i,其中i表示第i次取數(從1開始編號); 4. 游戲結束總得分為m次取數得分之和。 帥帥想請你幫忙寫一個程序,對于任意矩陣,可以求出取數后的最大得分。
解題過程: 這題比較有意思,?一開始會想到貪心,有經驗的話看數據范圍,肯定是動態規劃拉。首先取數各行之間沒有關聯,也就是每行都是要么取頭要么取尾,分開做n次就好了。
F[i][j]表示從第i列到第j列的最大得分,F[i][j]=max{F[i][j-1]*2+2*a[j],F[i+1][j]*2+2*a[i]} 用long?long?可以過7個點,高精度會有點慢,勉強AC。注意答案可能會有0,高精度可能會漏掉輸出。
第四題:
設 T=(V, E, W) 是一個無圈且連通的無向圖(也稱為無根樹),每條邊帶有正整數的權,我們稱T為樹網(treenetwork),其中V, E分別表示結點與邊的集合,W表示各邊長度的集合,并設T有n個結點。
路徑 :樹網中任何兩結點a,b都存在唯一的一條簡單路徑,用d(a,b)表示以a,b為端點的路徑的長度,它是該路徑上各邊長度之和。我們稱d(a,b)為a,b兩結點間的距離。 一點v到一條路徑P的距離為該點與P上的最近的結點的距離:
d(v, P)=min{d(v, u) , u 為路徑 P 上的結點}。
樹網的直徑 :樹網中最長的路徑稱為樹網的直徑。對于給定的樹網T,直徑不一定是唯一的,但可以證明:各直徑的中點(不一定恰好是某個結點,可能在某條邊的內部)是唯一的,我們稱該點為樹網的中心。
偏心距 ECC(F):樹網T中距路徑F最遠的結點到路徑F的距離,即
ECC(F)=max{d(v,F),v∈V} 。
任務 :對于給定的樹網 T=(V, E,W) 和非負整數s,求一個路徑F,它是某直徑上的一段路徑(該路徑兩端均為樹網中的結點),其長度不超過s(可以等于s),使偏心距ECC(F)最小。我們稱這個路徑為樹網T=(V,E,W)的 核 (Core)。必要時,F可以退化為某個結點。一般來說,在上述定義下,核不一定只有一個,但最小偏心距是唯一的。
下面的圖給出了樹網的一個實例。圖中,A-B與A-C是兩條直徑,長度均為20。點W是樹網的中心,EF邊的長度為5。如果指定s=11,則樹網的核為路徑DEFG(也可以取為路徑DEF),偏心距為8。如果指定s=0(或s=1、s=2),則樹網的核為結點F,偏心距為12。
注釋:對于 ?確定起點的路徑肯定是越長越好的證明:假設目前枚舉的路徑為S,要再添加一個點X進來,讓路徑更長一點,變成路徑T。樹網中到直徑的入口為X的點Y,(即Y到路徑的最短距離為Dist(X,Y))。Dist(X,Y)一定不會大于原路徑S的偏心距,否則S偏心距的路徑可以由Y出發經過X到路徑S上來,就大于Dist(X,Y)了,出現矛盾。 2014-07-28 22:16:01
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
