第一題: 某次科研調查時得到了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 用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。
樹網的直徑:樹網中最長的路徑稱為樹網的直徑。對於給定的樹網t,直徑不一定是唯一的,但可以證明:各直徑的中點(不一定恰好是某個結點,可能在某條邊的內部)是唯一的,我們稱該點為樹網的中心。
偏心距ecc(f):樹網t中距路徑f最遠的結點到路徑f的距離,即
ecc(f)=max。
任務:對於給定的樹網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。
解題過程: 這題題目看了n久才看明白,實在坑爹,先是想不明白題目中說的 「各直徑的中點(不一定恰好是某個結點,可能在某條邊的內部)是唯一的」,而且我還找到了反例。還好這個東西是廢話用不著的。 直徑有很多,但實際上只要在一條直徑上找就好了(證明不來。。。但自己畫有多條直徑的圖的時候,畫出來的都是對稱的。。)。。 因此找到一條直徑,把路徑記錄下來,然後用兩個指標i,j分別表示起點和終點,i指標每次往前移動乙個,然後j指標盡可能往後移動, 因為確定起點的路徑肯定是越長越好,粗略的證明見注釋,然後對路徑中的每乙個點為起點做一次dfs(先把路徑中的點標記為已經訪問過),就可以求出偏心距。關鍵是找到直徑,做法是隨便取乙個點做dfs,找到與它相距最遠的乙個點,那麼這個點必定是某條直徑的乙個端點。然後在以這個點為起點做dfs找到最遠的點,就是直徑的另外一端了。然後在做一次dfs把整條直徑給找出來。 證明用反證法。
注釋:對於確定起點的路徑肯定是越長越好的證明:假設目前列舉的路徑為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
解題報告 Noip2007字串的展開
在初賽普及組的 閱讀程式寫結果 的問題中,我們曾給出乙個字串展開的例子 如果在輸入的 字串中,含有類似於 d h 或者 4 8 的字串,我們就把它當作一種簡寫,輸出時,用連續 遞增的字母獲數字串替代其中的減號,即,將上面兩個子串分別輸出為 defgh 和 45678 在 本題中,我們通過增加一些引數...
noip2007 獎學金 (排序)
a1159.獎學金 時間限制 1.0s 記憶體限制 256.0mb 總提交次數 797ac次數 339 平均分 60.95 將本題分享到 檢視未格式化的試題 提交試題討論 試題 noip2007 普及組 問題描述 某小學最近得到了一筆贊助,打算拿出其中一部分為學習成績優秀的前5名學生發獎學金。期末,...
NOIP2007 普及組 獎學金
獎學金 問題描述 某小學最近得到了一筆贊助,打算拿出其中一部分為學習成績優秀的前5名學生發獎學金。期末,每個學生都有3門課的成績 語文 數學 英語。先按總分從高到低排序,如果兩個同學總分相同,再按語文成績從高到低排序,如果兩個同學總分和語文成績都相同,那麼規定學號小的同學 排在前面,這樣,每個學生的...