2019 09 13 NOIP提高組 模擬 A 組

2021-09-27 04:05:43 字數 913 閱讀 7649

t1:這題其實不難。

我們考慮在dfs序上dp。設f[i][j]表示到dfs序上的第i個點時,1~i經過了j條左邊的方案數。

那麼轉移有兩種情況:

1、在i下面加上乙個左兒子,則轉移到f[i+1][j+1]

2、從i往上走,走到第乙個沒有右兒子的點,然後加上這個點的有兒子,這樣的話就轉移到f[i+1][j-1](因為一定是少一條左邊)

最終的答案是f[n*2-1][0],因為一定要走到最右的兒子整棵樹才算構造完成。

t2:這題其實也不難,比賽時別被卡spfa。

推一下式子可以發現每一條邊的權值變化是有週期的,那麼這就是乙個分層spfa。

但是spfa會被卡,所以要麼用dij,要麼加上判斷dis[對頭]是否小於dis[隊尾]的優化(這個優化看上去不起眼,但是在這一題中十分有用)。

總結:在比賽時如果spfa有被卡的風險,那麼就盡量用dij。因為spfa的時間複雜度不穩定。

t3:這題有一點複雜。

首先要注意到子串行是可以不連續的。

首先我們設c[i]表示滿足長度為i的權值最小的某個子串行。那麼可以證明c[i]

那麼現在就有乙個分治的做法。首先假設我們算出了l~mid和mid+1~r的所有長度的答案,現在我們要求l~r的所有長度的答案。

可以設在l~mid中我們選出了s1個數,在mid+1~r中我們選出了s2個數,此時我們就可以更新l~r中s=s1+s2的答案。但是列舉s1和s2的效率是n^2的,此時我們就用到了剛才的結論。

假設s的最優解是s1和s2,那麼在算s+1時,我們只需要用s1-2+s2+3,s1-1+s2+3,s1+s2+1,s2+1+s2,s1+2+s2-1來更新即可。因為波動不超過2。

實際上,對於每個區間我們都要維護區間的每個長度的最大值和最小值,這時為了合併時使用。這樣維護所有長度的答案看上去是n^2的,實際上是nlogn的,這個想一想就明白了。

NOIP提高組 矩陣

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

NOIP提高組2005 過河

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

NOIP提高組 20151029模擬

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