NOIP/CSP-S 考前注意事項


NOIP/CSP-S 考前注意事項

實際操作與代碼注意事項

基本內容

  • 可以使用 #include <bits/stdc++.h>!!!從來都是可以的!!!不需要背誦一大串頭文件,更不要從本地的庫里去復制一大串頭文件(有的頭文件可能評測環境下沒有)。

  • 代碼保存在哪,是否需要建文件夾之類的,以考場上的 README.pdf 為准。根據往年經驗,江蘇是不需要建子文件夾的,把四個 .cpp 文件放在根目錄下即可。

  • 文件輸入輸出!!!具體來說就是:

freopen("problemname.in", "r", stdin);
freopen("problemname.out", "w", stdout);

​ 其中 problemname 是題面指定的文件名,每道題不一樣。

  • 測大樣例時注意不要覆蓋原本的 .ans 文件。可以把所有大樣例提前復制一份,以防這種情況的發生。
  • 不要用下划線開頭的函數,如 __gcd__builtin_popcount。自己定義的除外。
  • 變量名避免完整的單詞(hash, pipe, time, next),以及 x0, x1, y0, y1。如果要使用,可以簡寫(如 nxt),加前綴(如 mytime, _time),或者 \(\text{define}\) 掉(如 #define pipe guanzi)。
  • 不要忘記刪調試語句。
  • for 循環兩層循環盡量避免變量名重復。否則可能會出現奇怪的問題。
  • 結構體里如果開數組(尤其是數組較大的時候),自己寫一個空的構造函數。否則可能會出現奇怪的問題。
  • 多測清空!!!!(請確認每一個 \(\text{subtask}\) 都清空了)。但是如果題目只保證了 \(\sum n\) 小於幾,而沒有保證數據組數,不要用 memset(否則可能復雜度變成 O(T * MAXN),你就 \(\text{TLE}\) 了)。
  • 對拍時一定要寫 srand,不然可能就白拍了。
  • 定時存一存代碼。寫新做法時,不要把原本的做法刪了:可能有些部分還能用上,或者可以用來對拍,或者你新做法寫不出來(或想錯了)時,原來做法至少還能幫你拿到一些保底分。
  • 開棧的命令 -Wl,--stack=536870912。用法:復制到 \(\texttt{dev C++}\)工具 - 編譯選項 - 編譯器 里,並在 編譯時加入以下命令 方框前打勾。

算法相關

  • 二分上下界都 \(\leq 2\times10^9\) 時,有可能 \(l+r\) 會爆 int
  • 線段樹:
    • 空間要開 \(4\) 倍(但是千萬不要寫成 MAXN << 2 + 5)。
    • 莫忘 push_uppush_down
    • 區間修改 / 查詢時,應該是 if (ql <= mid)...; if (qr > mid)...;。不要把 if (qr > mid) 寫成 else
  • 倍增(例如樹上跳 \(\text{LCA}\))時,因為 \(u\) 點本身在向前跳,所以如果之后的運算中,需要用到原本的 \(u\),那么一定要提前復制一個替身變量。
  • 與上一條類似。分解質因數時,被分解的數在不斷被除。如果后面要用到原來的值,則要存一個替身變量。
  • 分治中,分清 l1。要 for(l~r),千萬不要寫成 for(1~r)。我在寫分治優化缺一背包時,犯過幾次這個錯誤。
  • 同一道題目里,有些量需要取模,而其它量不需要取模。一定要注意區分,千萬不要看到乘法就取模。

其他狀況

  • 江蘇省的電腦是 \(\text{windows}\) 系統,配了 \(\text{noi linux}\) 的虛擬機。我是只用 \(\text{windows}\) 的。初始時,你的虛擬機可能有兩種狀態:(1) 它自己就是一個小窗口,這是比較理想的狀態,你直接把它最小化就可以了;(2) 另一種情況是虛擬機全屏了,此時你找不到 \(\text{windows}\),千萬不要慌,千萬不要點右上角的退出(或關機)按鈕(否則整個虛擬機就都沒了,你收不到題目,也交不了代碼)。正確做法是把鼠標移動到屏幕下方,會出現一個最小化的鍵,點這個鍵,就可以回到 \(\text{windows}\) 了,並且你的虛擬機也沒有退,它變成了一個小窗口。

考場策略

比較主觀,僅供參考。

  • 先把所有題都看一遍。不要看到有的題面長 / 看起來向自己不會的算法就跳過。
  • 不管簡單題或難題,保證 \(20\) 分鍾的有效思考。不要發呆,或者迷茫、抱怨、產生負面情緒,都是不好的。思考時,在草稿紙上寫下每一個小思路。有時候思考的過程像是在圖上搜索,如果一個分支想不通就回溯,換另一個分支。把這些分支都寫下來,可以極大地幫助思考。NOIP / CSP-S 一定會有較多簡單題(即使它們經過了偽裝,不易被看出來),\(20\) 分鍾左右的思考時間,就是要分析題目性質,拆掉所有這些偽裝,發現核心的問題,然后套用我們學過的算法去解決它。
  • 保持信心,猛剛正解。承接上一條的意思,因為題目不會太難,我盡可能往正解方向去想。去年我已經拿過一等獎了,所以今年光拿到一等獎對我沒有意義,我要沖擊高分,就必須猛剛正解(當然,這樣有一定風險,最后暴力分都沒拿到,連一等獎都沒有。請沒拿過一等獎的同學謹慎嘗試)。我發現我在模擬賽時,常常自己陷入自閉,覺得好難的一道題,只要上 qq 聽別人說了句“這題很簡單”,往往一小會后就能想出來。說明我還是不夠自信。考試時要多一些信心,確信題目不難,自己能想出正解。
  • 時間分配上,前 \(30\) 分鍾讀題 + 思考 T1,前 \(50\) 分鍾內一定要把 T1 做出來。然后 \(20+60\) 分鍾想 + 做 T2。接下來 \(20+60\) 拿到 T3 高分(或滿分?)。最后 \(20\sim 30\) 分鍾把 T4 暴力打了。當然這只是一種理想情況,考場上要隨機應變。但是務必保證至少做出 \(2\) 題。
  • NOIP / CSP-S 中簡單題(T1, T2)的代碼,應該不會很長。寫之前手玩一下樣例,確保算法正確。先寫比較核心的部分,再寫比較板子的部分。例如:線段樹這種又長又套路的東西,就放到最后寫(以免寫完后才發現做法假了)。
  • 對拍。一定要對拍!!!\(60\) 分鍾的代碼時間里是留足了對拍時間的。不對拍就是在裸奔!!!不要只和暴力拍小數據,自己造幾組大的極限數據測一下。
  • 沒事上個廁所,有助於放松心情。

思考題目的技巧/套路/有用的聯想

OI 題目千變萬化,思考方法也是很多很多。這里只列舉一些比較重要的。

序列相關:

  • 序列問題,考慮是否可以先將序列排個序。例如很多選子序列的題,其本質是選子集,那不妨先把原序列排個序;但如果是真的選子序列(要依賴原序列的順序),那就不好排序了。
  • 序列問題,遇事不決差分一下(或者對 \(01\) 序列做 \(\operatorname{xor}\) 前綴和),說不定有奇妙性質。(或者前綴和一下?)
  • 普通序列變 \(01\) 序列。例如:對一個值 \(x\),把序列中 \(> x\) 的置為 \(1\)\(< x\) 的置為 \(0\)
  • 一類字典序最小/最大化問題可以轉化為:按順序枚舉 + \(\text{check}\) 問題。
  • 要求字典序小於/大於某個東西,考慮一段前綴都是相等的,第一個不同的位置在哪里?(數位 DP 常用到)。
  • DP 技巧:把代價均攤到每次新加入的數產生的增量上(差分)
  • 設計 DP 狀態時,不一定要把序列里的位置固定死。可以只考慮已加入的元素的相對位置關系。或者考慮每次操作為插入一段東西(尤其是序列里只有“包含”或“並列”關系時)。

計數相關:

  • 期望問題,有時每種方案出現的概率一樣,那么此時 期望 = 總和 / 方案數,由此可以轉化為求和問題。
  • 求和問題,經常用到拆貢獻的方法。即分別考慮每個元素對總和的貢獻。
  • 總方案數 - 不合法方案數(容斥的思想)。

數據結構相關:

  • 考慮枚舉一些什么:如枚舉位置?枚舉值?枚舉答案?(能不能換成二分答案?)。枚舉了一個東西,看能不能用數據結構快速維護出另一個東西。
  • 邊界入手考慮問題,如:第一次操作會做什么?。有的構造題,我們可以從數據規模最小的情況出發,然后歸納地構造。
  • 把問題離線,預處理一些東西?
  • 如果有非常奧妙的操作,啥數據結構都維護不了,那試試分塊吧。
  • 刪邊的處理方法:(1) 分塊。(2) 時光倒流(可能可以用 \(\text{kruskal}\) 重構樹記錄時光倒流的過程)。(3) 線段樹分治(不常用)。

其他:

  • 二進制,拆位考慮。有些問題可以按每一位是 \(0/1\) 分治。
  • 給出一堆點對:在點對之間連邊,嘗試建圖。
  • \(\gcd\)\(x\) 的答案 \(\to\)\(\gcd\)\(x\) 的倍數的答案,然后容斥。
  • 貪心配對:(1) 最大配最小。(2) 最大懟次大 / 最大懟所有。例如有些樹上問題,可以確定一個根,然后讓所有兒子配。
  • 矩陣快速冪中間,多了一些奇怪的點:把兩點之間的每一段分別拿出來做快速冪,可以預處理轉移矩陣。復雜度 \(O(C^3\log n + mC^2\log n)\)\(C\) 是矩陣大小,\(m\) 是奇怪點的數量。
  • 抓住操作中,不變的東西(如總和的奇偶性不變?)
  • 樹上問題,直徑 / 重心有沒有妙妙的性質。
  • 博弈題:二分答案(或者考慮二分答案,可以幫助你思考)。

最后,祝大家考出好成績!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM