NOIP2014提高組模擬題 8 9

2021-06-23 04:25:39 字數 3066 閱讀 6501

一、最大配對

題意:給兩個序列,要求選k組,每組從兩個序列中各選乙個數,要使各組數的差的和最大。

小論:兩個序列分別排序。每次用乙個序列的最大的減另乙個序列的最小的。

當時情況:估計100分,結果50分。雖然題目有提醒答案可能超過2^31-1,我也看到了,但想著等下打完再改,於是我打著打著就忘了……最後掛了50分。實在不應該。這個慘痛的教訓告訴我們:以後碼**時,發現錯漏要及時改正,或加個注釋提醒自己,以防悲劇的發生。好,就此打住。

二、旅行

題意:一組數a[1]..a[n]。可任意次交換相鄰的兩個數,但每次交換的較前的數,必須在前一次交換的較前的數的後面。要使最後交換後的序列每兩個相鄰的數的差的總和最小。

小論:dp(這題描述神似以前的某題,但方法迥乎不同。)我們可以發現,將第 i 個數一直換到第 j 個數,交換後的第i , i+1 , i+2 , ... , j-1與交換前的第i+1, i+2 , ... ,j 分別對應相同。也就是說,將第 i 個數換到第 j 個數,第 i ~ j-1個數間的相對位置沒發生變化,即這一段裡每兩個相鄰的數的差的總和不變 。於是我們可用s [ i ] 記錄【到第 i 個數不進行任何交換的答案】,也就是前 i 個數每相鄰兩數的差的總和。設f [ i , 0 ]為 第 i 個數到第n個數,第  i 個數不交換的最優解;f [ i , 1 ]為第 i 個數到第n個數, 第 i 個數交換的最優解。從n-1倒推到1。有f [ i , 0 ]=max(   f [ i +1,0]+| a [ i ]- a [ i+1] | , f [ i+1 ,1 ]+ | a [ i ]- a [ i+2 ] |  );(因為如果i+1 個數交換的話,第i+1個數會變成原來的第 i+2 個數)。

對於f [ i ,1 ],我們列舉它交換到的位置  j ,用min( f [ j+1 ,0]+| a[ i ]-a[ j] |  + | a[ i ]-a[ j+1 ] | + s[ j ]- s[ i+1 ], f[ j+1 ,1]+ | a[ i ]- a[ j] | +  | a[ i ]-a[ j+2 ] |+s[ j ]-s[ i+1 ]) 來更新f [i , 1]。

注意方面:臨界位置的處理。對於j=n 和j=n-1 的情況,明顯不用加上a[ i ]和a[ j+1 ]那坨玩意的比較了。

當時情況:估計20分,實際20分。之前打出了個dp,最後1小時又想了想發現之前的想法是錯的。最後只能交了個暴力上去。

三、資源勘探

題意:給出乙個n*m 的矩陣,設

b[i, j]

表示僅包含前

i行與前

j列的子矩陣有多少個數字恰好出現一次,那麼你所要輸出所有

b[i, j]

之和mod 19900907

。小論:設

f[i,1]為數i

橫座標的最小值,

f[i,2]為數i

橫最標的次小值

(一開始都是

m+1)

,f[i,3]為數i

最近出現的行數。從(1,

1)掃到(n,

m)。在第

j行掃到乙個數

i,在答案中增加

(f[i,2]-f[i,1])*(j-f[i,3])

(因為在縱座標為

f[i,3]~j-1

,橫座標從

f[i,1]~f[i,2]-1

的矩陣中,第

i個數都只出現過一次),並更新

f[i]

。最後掃一遍每個數更新答案(因為最後一次更新的還沒算)。

當時情況:估計

30分,實際

20分。以為又是

dp,想了半天沒想出來,浪費了大量時間,仍然只能上交暴力。

四、排列統計

題意:對於給定的乙個長度為

n的序列

,問有多少個序列

對於所有的

i滿足:

a[1]

~a[i]這i

個數字中有恰好

b[i]

個數字小等於

i。其中為1

~n的乙個排列,即1~

n這n個數字在序列

a[i]

中恰好出現一次。

(原諒我語文不好不知如何描述於是把題目描述搬運了過來。)

小論:用乙個矩陣表示乙個序列a比如

0 0 1 0 0

0 1 0 0 0

0 0 0 0 1

1 0 0 0 0

0 0 0 1 0表示3

,2,5

,1,4

b[i]

即表示以

(1,1)

為左上角

,(i,i)

為右下角的矩陣中

1的個數。可以發現原來那個大矩陣是由

n-1個反的

』l』形與

(1,1)

組成的。對於

b[i]-b[i-1],

如果它為

1:則可以在第

i-1個

』l』形的格仔中選乙個填

1。由於大矩陣每行每列最多只有1個

1,所以這個

』l』形中可以選

(i*2–1–b[i-1])

個格仔填1。

如果它為

2:則可以在第

i-1個

』l』形的格仔中選兩個填

2。而不可能在第

(i , i )上填1

(如果填了,剩下乙個

1無論填在哪都會與其在同一行或同一列)。所以方案數為(

i – 1– b[i-1])^2

。如果它為

0:不管它。

如果它大於

2:不可能。

最後把方案乘起來就行。由於答案很大,所以需使用高精度。

當時情況:估計

30分,實際

30分。第三題浪費了大量時間,使這題基本上沒多少時間思考,直接打了暴力。

總結:這套模擬題充分暴露了自己的問題:貪快貪多。第一題打完後沒好好檢查就不管了,想著要趕緊打完後面的題,多拿些分。可後面的題卻怎麼也想不到正解,對著題目乾瞪眼半天,最後也只能交個暴力上去,而第一題本能ac,反而因為自己的疏漏跪了。今後做題要改變策略,先把會做的、胸有成竹的題100%拿下,不留缺漏。對於暫時想不出正解的題,換個思路(就算掛也不要吊死在一棵樹上),或者暫時放一放,做做後面的題。這樣方能發揮出自己的正常水平,不留遺憾。

noip2014 提高組題解 equation

題目大意 給定高次方程an x n a1 x 1 a0 0 求 1,m 區間內有多少個整數根 ai 10 10000,m 1000000,n 100 首先,在考試的時候由於我很弱,一看到ai的範圍我就傻了,果斷30分騙起 解題思路 1.30分 30分很好騙,直接暴力就行了 2.60分 因為我考試的時...

noip2014 提高組題解 link

題目描述 聯合權值 link.cpp c pas 問題描述 無向連通圖g 有n 個點,n 1 條邊。點從1 到n 依次編號,編號為 i 的點的權值為w i 每條邊的長度均為1 圖上兩點 u v 的距離定義為u 點到v 點的最短距離。對於圖g 上的點對 u,v 若它們的距離為2 則它們之間會產生wu ...

NOIP2014提高組 尋找道路

noip2014 提高組 day2 試題。在有向圖 g 中,每條邊的長度均為 1,現給定起點和終點,請你在圖中找一條從起點到終點的路徑,該路徑滿足以下條件 1 路徑上的所有點的出邊所指向的點都直接或間接與終點連通。2 在滿足條件 1 的情況下使路徑最短。注意 圖 g 中可能存在重邊和自環,題目保證終...