1. 程式人生 > >NOIP 考前研究

NOIP 考前研究

NOIP 2017 試題研究

D1T1 小凱的疑惑 (45 min)

看到題面,大概是推數學公式。

先打暴力表,觀察 \(a,b\)\(n\) 的關係。猜想 \(a×b−a−b\)

引理:對於正整數 \(p , q\) 滿足 \(\gcd(p, q) = 1\), 使得 \(px + qy = n\) 無非負整數解的最大正整數 \(n\)\(pq - p - q\).

使用反證法證明,即假設存在正整數 \(x\)\(y\) 使得 \(px + qy = pq - p - q\),證明矛盾。期望得分 100 分。

沒辦法一眼望穿?觀察到答案更接進於 \(a\times b\)

,考慮從 \(a\times b\) 到 1 遞推。期望得分 70 分。

D1T2 時間複雜度 (1 h)

一眼望穿,模擬 + 字串 + 棧結構。

然後死在模擬的過程中……期望得分 0 分。

絕對不能沒把整個題目推完就開始寫。先在草稿紙上把所有要注意的點寫出來,列出清單。

在草稿紙上列出模擬的所有標記變數的含義和作用。在草稿紙上寫出大致程式碼層結構,標出特判和標記變數作用的位置。(其實程式碼大致就出來了。)

上機實現。期望得分 100 分。

此類題目(模擬 + 字串)嚴重考察細心和耐心。如果你的思路清晰,程式碼嚴謹工整,就不會過不去樣例……

D1T3 逛公園 (45 min)

DP + 拓撲序 + 最短路

or 搜尋 (記憶化)

觀察題目。啥都看不出來?先打暴力。

容易發現,Day 1 還沒有考 DP。注意到 \(K\le 50\),猜測這是一個與 \(k\) 有關的 DP。

特殊情況 1:當 \(K=0\) 時,最短路計數!

最短路計數:

Dijkstra 堆優化 或 SPFA(死了)。

定義一個新變數陣列 cntcnt[S]=1。更新邊長的時候如果大於號就覆蓋(cnt[to[i]]=cnt[x]),相等的話(即有相同最短路徑)就相加(cnt[to[i]]+=cnt[x])。無邊權即邊權為 1。

注意模法。實現難度 [普及+/提高]。

期望得分 30 分。

特殊情況 2:然後考慮 沒有 0 邊 的情況。構造 DP 求解。寫不出來……期望得分 30 分。

然後回過頭檢查 T1、T2 的程式碼。千萬不要放空!放個 rand()%mod 也行啊……要愛惜分數。

D2T1 乳酪 (45 min)

觀察到本題適合使用並查集。(NOIP 考點之一。)

距離要預處理。

實現難度 [普及/提高-]。期望得分 100 分。

D2T2 寶藏 (1 h 30 min)

狀壓 DP。思路難想!期望騙分 0 分。

寫不出來狀壓 DP……顯然要考慮部分分。DFS + 剪枝!暴搜演算法的時間複雜度是 \(O(\)玄學\()\)。不要忘記低階演算法的重要性,暴搜 AC 什麼的大有人在。期望騙分 ?? 分。

D2T3 列隊 (45 min)

標算是樹狀陣列。想不到……想到了也不會寫……

考慮部分分採用離散化思想。

對於 \(x_i=1\) 的情況,轉化為:

對於一個序列,支援操作 (1) 刪除第 \(k\) 個元素;(2) 在末尾新增一個元素。

嘗試用樹狀陣列實現。

維護一個 01 序列,第 \(i\) 位上是 0 表示這個位置上的數已經被刪除了或者還沒有被插入,第 \(i\) 位上是 1 表示這一位上的數沒有被刪除。

那麼刪除操作就是 1 → 0,插入操作就是 0 → 1。第 \(k\) 個元素就是字首和為 \(k\) 的位置。樹狀陣列二分。

PinkRabbit

其他就完全不會了。期望得分 30 分。(模擬得分)

總結

樂觀估計為 360+?? 分。可見去年的難度還是很高的。如果暴搜寫得給力能拿 400 分,如果字串模擬炸了,那就省一無望了。(畢竟去年 FJ 省一線 300 分。復旦自招線 360 分……)

如何發揮超常正常?首先該拿的分數堅決不能丟掉。字串模擬、暴搜剪枝,還有最短路和並查集的板子,一定要寫出來。DP 能推的儘量推,部分分能騙的儘量騙……

明明所有考點都是 NOIP 範圍內的,明明我也會 DAG 上 DP、狀壓 DP、樹狀陣列……可見還是學藝不精,有待提高。

括號中標記的是完成核心程式碼的理論時間。實際上,一旦陷入 bug 的泥潭就很難出去了……

祝 NOIP 2018 RP \(\rightarrow\infty\)