2017 06 24 NOIP提高組 模擬賽B組

2021-08-03 00:02:19 字數 1019 閱讀 9272

t1:如果兩點在障礙的同一側,那麼直接計算距離。

如果兩點在不同側,那麼使用二分查詢,如果有乙個通行處a[i]滿足x1<=a[i]<=x2,則x1,x2的距離還是直接算。要是找不到這樣乙個a[i],那麼找乙個最接近x1的和乙個最接近x2的,從兩個當中選取答案最小的就行了。

總結:1、比賽時因為把x與y搞混,(y決定是否在同一側,x決定是否在中間)。

t2:如果存在一段連續遞增或連續遞減的,可以把這一段合併。把所有可以合併的合併之後在做n^2的dp就行了。

注意:合併之後差的平方不能直接計算,得預處理好。

總結:1、做題時要先找性質,不要急著去想演算法。

t3:樹形dp。

設g[i]表示第i個節點的ans,f[i][j]表示把i個人與j個人合併的方案數(j個人的根比i個人的根弱),num[i]表示以第i個節點為根的子樹的節點的個數。

那麼我們先預處理出f[i][j]。f[i][1]=i,f[1][j]=1,f[i][j]=f[i-1][j]+f[i][j-1]。

然後我們處理出num,最後求g。

我們從根節點開始dg,不過要倒著列舉每個節點的子節點(從弱到強),則g[x]=g[x]*f[num[i],sum]*g[i],x為當前要求的節點,i為當前列舉到的子節點,sum為比i要弱的所有節點j的num[j]的和。最後輸出f[1]。

總結:1、這類題做的時候要找出每乙個點的答案是由那幾部分組成的,在規劃計算。

t4:把1看成1,0看成-1,設s[i]表示第i個位置的字首和。則絕對值最大的最小值=|s[n]|/m向上取整。

求出這個ans之後,我們開始分段,字典序最大就是倒過來之後字典序最小,所以我i們只討論字典序最小怎麼求。我們如果要分一段,那麼要滿足這一段本身合法,並且它之後的段也合法,合法就是絕對值之差不大於預定的ans,這樣我們可以順著搜一遍,一旦找到合法位置就分,最後輸出即可。

ans=|s[n]|/m向上取整的證明:

|s[n]|代表的是男女之差的絕對值,那麼我們要把這些數量盡量平分到每一段裡去,那麼ans=|s[n]|/m就是最優解。關鍵是怎樣保證一定能分出滿足ans的m段來呢?

NOIP提高組 矩陣

在麥克雷的面前出現了乙個有n m個格仔的矩陣,每個格仔用 或 表示,表示這個格仔可以放東西,則表示這個格仔不能放東西。現在他拿著一條1 2大小的木棒,好奇的他想知道對於一些子矩陣,有多少種放木棒的方案。因為棍子是1 2的,所以很容易就能發現,兩個被分割的塊,除了跨越兩個塊擺放木棍的方案數會對答案有影...

NOIP提高組2005 過河

過河 river 問題描述 在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點 0,1,l 其中l是橋的長度 座標為0的點表示橋的起點,座標為l的...

NOIP提高組 20151029模擬

其實這套題目並不算太難,但是還是發揮不了100 水平。第一題直接線性篩法,求出質數,然後就可以判斷乙個數是否為質數了。這道題還可以用miller rabin去求,後者的速度較快,如果資料再大些,就要使用後者了。第二題,比賽時發現了,當n 7時,答案會每四個一迴圈,但是就沒有繼續往下想,其實想下去會想...