論蒟蒻是怎樣作死的(noip模擬賽心得&易錯總結)

作爲一名蒟蒻oier……

蒟蒻,俗稱魔芋,全株有毒,以塊莖爲最,不可生吃,需加工後方可食用。 (手動滑稽)

sort() 從不寫 #include<algorithm>
memset() 從不寫#include<cstring>
從不關心是否 爆 int,從不開 long long
雙向邊 和 線段樹 從來只開一倍大小
求 Lcm 總是先乘後除爆 long long 導致 RE
DP 和 遞推 從不賦初值
求 Lca 和 並查集 同樣從不賦初值
模擬向來複雜度高
經常看不到 時空限制,各種 TLE/MLE/RE
min/max 的初值總是搞反 (又是初值)
深搜從未一次寫對,廣搜從未寫對
從來不 取模%%%
從不看 數據範圍 是否包含 負數
經常把 循環變量名 重複使用/打錯
經常寫錯 循環邊界 0/1/N/M
提交代碼的時候,從不建子文件夾
讀入優化 int 改 LL 從來改不全


除此之外還應注意……

細節的地方一定要處理好。細節決定成敗,點滴造就未來。

不能忘記刪調試
不能寫錯 讀入優化
不能忘記加 freopen(),fclose()
Linux 系統下全局變量可能沒有初始化,最好初始化一下
調試刷屏的時候可以用 system(“pause”) 解決(頭文件 #include<cstdlib>
指針用完後不能忘記 clear()
long long 可能會 MLE
注意運算的優先級
寫 Dfs/遞歸的時候記得檢查 遞歸層數(一般是10000層)
輸出不能打錯(如 “Yes”/”No”/”Impossible”)
心態要好,累了 去個廁所/洗把臉/吃塊巧克力 (然而本人不愛吃巧克力因爲太乾2333)
聽說程序最好要放在虛擬機裏編譯一下(本人並不知道怎麼搞)
調試完以後要自測小數據和大數據


一些小技巧……

會寫暴力先寫大暴力。畢竟,騙分過樣例,暴力出奇跡。

字符串複製可以用 strncpy(ans, A, num)
數組複製可以用 memcpy(ans, A, num)
(以上兩個都是複製A中的num個給ans)
字符串字典序排序:bool cmp(string a, string b){return a+b<b+a;}
最大值最小/最小值最大 想想二分
貪心的證明:易證
有些 DP 的狀態可以轉換成最短路去做
遇到樹,一般不是 圖論 就是 樹形DP
求和什麼的題不會用 數據結構 就想想 前綴和 什麼的
一個 hash 可能會重的話就 雙hash 吧(不過犯懶的話可以用map)
手算數列查看是否爲著名數列
有時間不能閒着,要對拍 (但是最可怕的是,只會寫大暴力)
必要時,可以 打表找規律,可以寫 無解/樣例
考前先讀題,讀題後要將題目歸入幾個框架:模擬、枚舉、搜索、貪心、DP、圖論、分治

如果你發現你旁邊的人寫得很快,請你放心,他的算法十有八九是錯的

所佔內存 = 數組大小 * 類型長度 / 1024 / 1024(MB)
記得在編譯器裏打開警告 -Wall-Wshadow


關於考試的數據範圍與算法的關係……

1e6 = 1000^2 = 100^3 = 2^20
n<=20: O(2^n) 搜索(瞎搜)、DP、暴力
n<=100: O(n^4) 搜索、DP、Floyd、暴力
n<=1000: O(n^2) DP、圖論、暴力優化
n<=100000: O(nlogn) 二分答案、二分查找、分治
n<=1000000: O(n) 貪心、數學、構造、思維 (瞎寫、卡常)


一些 zz 錯誤……

  1. for(int i = 20; i <= 0; i++){}
  2. for(int i = d; i <= d-k; i++){}
  3. for(int i = end; i <= start; i++){}
  4. dis[i] == 0;
  5. for(int i = 0; i < N; i++)for(int j = 0; j < i; i++){}
  6. dfs(){ ... dfs();... }複製一下 rdfs(){ ... dfs();... }

最後,預祝包括我在內的 全體oier 2017光棍節 不!退!役!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章