一、最大配對
題意:給兩個序列,要求選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 中可能存在重邊和自環,題目保證終...