1. 程式人生 > >NOIP前集訓總結

NOIP前集訓總結

注意事項和小trick:

1.該開long long開long long,不開long long 見祖宗。
2.各資料範圍的上限複雜度:
1 0 7 10^7 ~ 3

1 0 7 3*10^7 O ( n
) O(n)

1 0 6 10^6 O
( n log n ) O(n\log{n})

2 1 0 5 2*10^5 O ( n log 2 n ) O(n\log^2{n})
1 0 5 10^5 O ( n n ) O(n\sqrt{n})
3 1 0 5 3*10^5 O ( n n log n ) O(n\sqrt{n}\log{n})
5 1 0 3 5*10^3 O ( n 2 ) O(n^2)
1 0 3 10^3 O ( n 2 log n ) O(n^2\log{n})
3.若資料範圍中 n n 比較小,往狀壓方面想,適當想想搜尋。
4.一般需要決策的題目,若可以優化,則可以用DP,但一般資料範圍比較大就會有性質,根據性質來尋找最優決策或簡化狀態,若狀態空間過大,一般以貪心為主。
5.記住出度為 m \sqrt{m} 的建圖方式,在一些計數題中有用。
6.計數問題,當DP很難算時,想想容斥,以及補集轉化:至少,至多相減。

10.15

今天是第一場模擬賽,成功智商下線。八點開始看題,T1一眼二分一個值,然後判是否能從(0,0)走到(x,y),這時候腦子抽了,想到用射線法,邊界之間連邊,判是否會包圍(0,0)。事實上這個是對的,但出現各種細節錯誤,而且此題暴力不可打,不可拍,導致成功爆零。其實可以直接判斷邊界之間能不能互相聯通也可。T2基環樹上求所有最短路徑最大值。考慮把環去掉先。可以求出森林直徑,並得到每個點的最長鏈,然後在環上DP一下就好。但由於細節太麻煩,我調了兩個半小時,導致整場比賽下來就A掉這一題。T3分析性質後可以用 f i , 0 / 1 f_{i,0/1} 做一個簡單的樹形DP。總的來說,程式碼能力需要加強,對於一道題不要只想一條思路,要多想幾個方向,既檢查想法正確性又擴充套件思維,最近狀態不佳,需要調整。

10.16

今天這場比賽真的不能不被吐槽。T1一道大水題DP(雖然我WA了),T2知道虛樹的一般都會做,T3原題。。。。開場先寫完T1,然後敲完T2,T3直接用原題程式。不用多少時間就寫完了。但是程式碼量很大,這場比賽簡直無腦,不能檢驗我真實水平和提升(真實水平很菜,只會模板,原題)。T1因為陣列邊界問題而WA,以後比賽要注意輸入每個值的取值,看是否有列舉漏的。

10.17

這場比賽並沒有拿到可以拿到的分數。T1是可以摸索出正解的,但是並沒有拿到滿分,在於並沒有對拍,僅僅考慮兩個序列不同的位置可以互相移,但是可能會出現換不到另一個數的情況,只能考慮先把手中數放好,然後抓一個另外的數來換到另一個位置,考慮不等的位置 a i a_i b i b_i 連邊,表示要換到這個位置,相鄰聯通塊之間互相跳需要 1 1 的代價,最後答案加上聯通塊個數 1 -1 即可。T2拿到了滿分,套路的期望DP。T3的博弈題, n 2 n^2 s g sg 做法十分顯然。考慮優化,發現行不通,那麼就要考慮猜結論了。考慮什麼情況下最優的使其必定能贏,儘量讓狀態定在一個位置,便是向其相反的操作來做,或者故意讓一步,達到目標狀態,其實這個結論不是很難猜,稍微觀察手推,思考一下應該就能發現。對於挖掘性質,轉換模型的題目不熟悉,要多多轉換題意,猜測最優狀態下的決策,性質。

10.18

前兩題比較簡單,T1顯然的 n 3 n^3 狀態的DP,考慮優化,我們是最大最小值,縮小狀態就套路的列舉最小值,那麼最大值也確定, O ( n ) O(n) DP即可。T2過水。T3首先發現答案顯然具有可減性,那麼使用括號序肯定最優,次數我們可以使用 A C AC 自動機解決,那麼轉換為一個二維偏序,但是這時候其他資料結構都會被卡掉,必須要去除其中一個偏序的影響。我們是在整個 A C AC 自動機上搞,所以會有一維偏序,考慮每一次把括號序上的串的 A C AC 自動機構出來。考慮到其是一個區間且 A C AC 自動機形態不變,我們用線段樹維護 A C AC 自動機,即對於線段樹上每一個節點代表的區間構 A C AC 自動機來搞,那就只剩一維偏序了,空間也不愁。當一些做法遇到瓶頸的時候,想想是哪些東西拖了後腿,考慮去除掉一些東西,或者簡化一些東西,發掘這些東西的性質,什麼在變,什麼不變。

10.19

今天這場比賽做的很糟糕。T1比較簡單,很快注意到怎麼判有解,注意到多餘邊無用,建出生成樹隨便做即可。開始肝T2,一開始天真的以為以每一個景點作為起點跑一遍DP即可。後來發現不可行,這時候考慮了倒著DP,但是發現這樣好像不太對勁,算不了答案就棄掉這種想法,繼續想,然後考慮到第一步的結論,卻始終過不了樣例,離比賽結束30分鐘看T3。卻發現比較簡單,但沒有時間寫了。匆匆交了T2錯誤的程式,比賽就結束了。有時有一些看起來無從深入的想法,往往可以仔細探究,不能輕易丟棄想法,比賽時應該仔細想題,看每一道題,若有確定的解法才開始寫,多想一想,想多一點。思維總是轉換的過於迅速,跳躍是好事,但不能夠快速的過濾想法,想到一個東西,應停下來,仔細分析一波。

10.22

開場開下T1,本來覺得非常難做,突然發現圖是一棵仙人掌,那麼只要把所有環拉出來,那麼對於一個右端點,合法的最左端點一定是單調的,我們可以把它弄出來,查詢二分一下即可。T2求動態LIS,觀察發現只需要知道每個數是否存在於所有LIS中,這個比較難想,需要分析性質,想了半天沒什麼好想法,打了60分暴力走人。
(如果繼續分析下去,感覺發現這個性質不難,對於一個位置,若他在所有LIS中,那麼他的排名是固定的,若跟它處於同一排名的數可以成為LIS,顯然這個數不會在所有LIS中)
T3套路的列舉 a i , a j a_i,a_j ,然後統計答案,發現要乘上一個係數,這個係數和錯排有關,套路地容斥出三個係數,然後分類討論即可。
思維太僵,不會發現性質,有性質在手不會利用。

10.23

這場比賽真的很無語,三題都是想到了正解,卻沒打出來。
T1看了半小時,發現他可以每一次操作相當於把 l , r l,r 先賦為 1 1 ,然後做 k k 次字首和,當時覺得這玩意差分能做,然後碼了出來,然後樣例一直WA,就認為這個做法是錯誤的,棄了。
事實上把 k k 從大到小做就好做多了,或者排序,對於每一個 k k 做。
T2很套路的計數題,發現剛好等於 k k 的答案很難算,可以用大小至多為 k k 減去大小至多為 k 1 k-1 ,這個可以 D P DP 算,預處理 n n 個點標號無向連通圖方案就好。
T3資料結構題,想了一會 l o g log 做法,不太會,然後轉念想了一下,可不可以分塊,發現,只需要用連結串列維護每一塊相對位置,即可,此時離比賽結束僅有40分鐘,到最後也沒有調出來。
總之很可惜,思維過弱,程式碼實現能力差,多想想與其有點關係的東西,看是否能夠藉此得出答案。

10.25

這場比賽成功降智。T1一眼以為是道大水題,不管怎麼染代價不變,列舉最後顏色,計算答案即可,然後沒有舉出反例,成功GG。事實上可以先染成小的最後染成目標顏色,所以我們可以設計一個DP,設 f i f_i 表示前 i i 個瓶子染成目標顏色的代價,每次列舉一個區間先變成最小值再染,然後倒著做一遍,列舉一箇中間點,表示從它開始往兩邊染算答案。
T2是個SB套路題,排序列舉邊權然後啟發式合併即可。然而陣列開小RE,成功送掉70分。
T3不可做,不可改。。。。。。

10.26

再次降智,T1是個找規律or推式子題,一開始想的就是列舉深度算答案,結果這個想法我給棄了,棄了。。。。最後推出了一個遞推式,60分滾粗,T2題意都看不懂,跳了,轉化後是求一個期望LIS,用一個比較神奇的DP可以做到 O ( n 2 2 n ) O(n^2*2^n) 。T3套路求 g c d gcd ,那麼肯定先分解質因數啊,考慮對於每種質因數分開做,要取 m i n min ,還要關注深度,子樹資訊,發現深度那個可以差分掉,那麼排序,用樹狀陣列維護即可。複雜度 O ( 8 n log n ) O(8n\log{n})

10.30

這場比賽打得還算不錯,T1很水,隨意貪心一下即可。T2肯定要二分啊,然後怎麼做,發現要答案正確就一定要確定一個取值區間?挖掘答案性質就能發現,全域性最大最小最優情況一定在兩部分,那麼就能確定區間了,上下掃一遍出解。T3先轉化題意為加入權值和儘量大的邊,使樹上僅有奇環,考慮一條非樹邊會覆蓋一條路徑,一條樹邊不能被覆蓋兩次,並且每個點的度數不會超過10,於是我們可以設計一個狀壓DP,狀壓是否要考慮兒子的貢獻,把路徑掛在lca上,然後dfs一遍DP出解。