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\)