1. 程式人生 > >noip2018 考前提醒!

noip2018 考前提醒!

適應Noilinux

1.終端操作
開啟終端 \(Ctrl+Alt+T\)
開啟資料夾 \(cd\) +名稱
新建資料夾 \(mkdir\) +名稱
開啟 \(vim\) 配置 \(vim ~/.vimrc\)
開啟 \(vim\) 檔案 \(vim\) + 檔名

2.強大的\(Vim\)配置

set nu
set mouse=a
set tabstop=4
set shiftwidth=4
set autoindent
set smartindent
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
inoremap { {}<ESC>i
inoremap " ""<ESC>i
inoremap ' ''<ESC>i
color desert
map <F9> <Esc>:w<CR>: !g++ % -o %< && ./%< <CR>
imap <F9> <Esc>:w<CR>: !g++ % -o %< && ./%< <CR>

3.\(Vim\) 操作
複製 \(n + yy\)
貼上 \(p\)
刪除 \(n+dd\)
撤銷 \(u\)
退出死迴圈 \(Ctrl+c\)
放大字號 \(Ctrl+shift+'='\)
縮小字號 \(Ctrl+'-'\)
儲存 \(:w\)
退出 \(:q\)
進入插入模式 \(i\)
退出插入模式 \(Esc\)

4.對拍

system("./data > data.in");
system("./1 < data.in > try1.out");
system("./2 <data.in > try2.out");
if(sytsem("diff try1.out try2.out")) printf("WA\n");
else printf("AC\n");

5.千萬不要閒的用滑鼠滑輪!會意外退出!
6.寫 \(Vim\) 時刻注意儲存!
7.\(Noilinux\) 密碼 123456


易犯錯誤

1.標頭檔案
別忘了 #include<cmath>#include<cstring>
對拍測時間 #include<ctime>\(clock()\)

2.\(using\) \(namespace\) \(std;\) 別忘寫!

3.陣列大小
無向圖邊 \(m \times 2\) ,注意邊數與點數
不同陣列大小不同時一定要區分!
for(int i=0;i<MAXN;i++) 注意取不到等!

4.陣列名稱不要搞混
變數(\(i\),\(j\))別寫反

5.取模運算
出現減法時 \((\%P+P)\%P\)
需要取模的變數,在任何操作後都要去取模!不要漏!

6.溢位
判斷 \(int\) 是否需要轉 \(long long\)
運算中間量要不要轉

7.\(double\) 問題
判斷相等時 \(fabs(r-l)<eps\)

8.位運算
注意優先順序,瘋狂加括號
不要輕易取反(符號也會變)

9.做題細節
看題不要看漏!題目最細小的地方!!
考慮特殊情況,不要漏!

10.想題時
多舉反例,想出一些思路是先別急著高興,往後想
限時想題,及時放置
動態規劃時間複雜度=狀態數 \(\times\) 轉移時間!轉移時間別漏了!

11.輸入大於 \(10^5\) 加讀入優化

12.程式碼實現細節
樹鏈剖分:
求重子時別忘了 size[u]+=size[v]
根節點不要 \(dfs\) 兩遍;在 \(dfs\) 前賦值

倍增:
陣列下標問題,別越界

線段樹:
下放 \(lazy\) 的同時正確更新 \(sum\)
結構體名別寫錯

強連通分量:
\(vis\) 表示進棧情況:0--未進過,1--在棧中,2--已出棧

字串雜湊:
想好是否真的可用
加1減1的事情想清楚,多對拍

並查集:
路徑壓縮 int getfa(int x) { return x==fa[x] ? x : getfa(fa[x]); }
初始化 \(fa[i]=i\)

\(Dijkstra\)
堆優化,\(pair\) 注意第一關鍵字為 \(dis\)

\(SPFA\):
\(dfs\) 版的 \(vis\) 表示是否正在遍歷
判負環可將 \(dis\) 都設成0

差分約束系統:
大於等於還是小於等於

歐拉回路:
注意在訪問完一個節點後,將其加入倒敘的 \(ans\)

平衡樹:
更新 \(size\) 等時別忘了加上自己的


常見思想

1.求某某最值 -> 轉化為二分+判定(前提有單調性)
2.問題分解
3.將問題等價轉換
4.有時多求一些東西,包含了答案
5.圖論與資料結構相結合,動態規劃、數論與圖論結合(分層圖)

猜結論,找規律——數論大膽推&發現;圖論謹慎證明;動規小心陷阱
情況考慮周全——多舉反例&特殊例子;眼光放開
不要想麻煩——排除干擾,簡化題意;從簡單演算法(二分、陣列)想起


小技巧

1.預處理,字首和…
2.列舉子集時 for(int i=t;i;i=(i-1)&t)
3.用 \(stl\) 中的 \(set\)