# NCTU PCCA winter
## 快速索引
- [活動網頁] | [水題大賽] | [課程網頁]
- [演算法筆記]
[課程網頁]:https://sites.google.com/g2.nctu.edu.tw/pcca-winter-2018/%E8%AA%B2%E7%A8%8B%E8%B3%87%E8%A8%8A?authuser=0
[水題大賽]:https://vjudge.net/contest/204504
[活動網頁]:https://sites.google.com/g2.nctu.edu.tw/pcca-winter-2018/%E9%A6%96%E9%A0%81?authuser=0
[演算法筆記]:http://www.csie.ntnu.edu.tw/~u91029/index.html
### 一般組
- Day 1: 二分搜尋法 ([pdf](https://drive.google.com/file/d/12n-7wQRKTvFtCwddk9UVrgCieCYyOlwr/view?usp=sharing)) ([上機練習](https://www.google.com/url?q=https%3A%2F%2Fvjudge.net%2Fcontest%2F210524&sa=D&sntz=1&usg=AFQjCNEEMkvxGitZbfdAk_9QXjFiwSxxgQ)) ([題解](https://www.google.com/url?q=https%3A%2F%2Fhackmd.io%2Fs%2FrknuUZkLz%23&sa=D&sntz=1&usg=AFQjCNEPTGwIPntZ-uN-fEYm6OZaRlju7g))
- Day 2: 資料結構&STL ([slide](http://www.google.com/url?q=http%3A%2F%2Fslides.com%2Fderor1869107%2Fdeck-4%23%2F&sa=D&sntz=1&usg=AFQjCNGzB4v6IF6vGn8dfUV5fhlG0WhysQ)) ([上機練習](https://www.google.com/url?q=https%3A%2F%2Fvjudge.net%2Fcontest%2F210601&sa=D&sntz=1&usg=AFQjCNE8u4HXr9kMqD8wYfZ9vhgu7IRm0g)) ([題解](https://www.google.com/url?q=https%3A%2F%2Fhackmd.io%2FCzCmFYGYDYBNQLQHYmgJwOAQ2lhAONWABk0mHFmGIEZIaksg&sa=D&sntz=1&usg=AFQjCNEbSnUPMmxj6iZzdXqKSG-nsCDhbw))
- Day 3: 暴力法 ([slide](https://www.google.com/url?q=https%3A%2F%2Fhackmd.io%2Fp%2FryGTJ8nrM%23%2F&sa=D&sntz=1&usg=AFQjCNGH7PXHP8TjC0eFRMMxV0q7F9gF7Q)) ([上機練習](https://www.google.com/url?q=https%3A%2F%2Fvjudge.net%2Fcontest%2F210927&sa=D&sntz=1&usg=AFQjCNFPcimaKWfU3EYDOweIv05m6mT8ug)) ([題解](https://www.google.com/url?q=https%3A%2F%2Fhackmd.io%2FMwBgHARpCmCMC0AWAxgM0UgrAJgIbwkRGHgBNoxZZdYB2ZaUxIA%3D%3Fview&sa=D&sntz=1&usg=AFQjCNGG1qArKi1-im7recUWCkrO-8GkRg)) (影片)
- Day 4: 貪心法 & 分治法 ([slide](https://docs.google.com/presentation/d/1D-HH4ijGoFix-BREc8xcR-1nFesMEgMyFdIVdnFf6tY/edit?usp=sharing)) ([上機練習](https://www.google.com/url?q=https%3A%2F%2Fvjudge.net%2Fcontest%2F211059&sa=D&sntz=1&usg=AFQjCNHnpObaP6iVBFoa-tvg6wVdDfu1Cw)) ([題解](https://www.google.com/url?q=https%3A%2F%2Fhackmd.io%2Fs%2FSy3m-9jBz&sa=D&sntz=1&usg=AFQjCNGoGvLhYkgp7OcYsQu5deBN3F8C5A)) (影片)
- Day 5: 動態規劃 ([slide](https://docs.google.com/presentation/d/1lD8JDTCXKS-lh0gPTqcYJ-xHZJo6R982DfkXBO8cicc/edit)) ([上機練習](https://www.google.com/url?q=https%3A%2F%2Fvjudge.net%2Fcontest%2F211396&sa=D&sntz=1&usg=AFQjCNGnC--Bm8_sAHmOJ1V3jFdIEWb2Ow)) ([題解](https://www.google.com/url?q=https%3A%2F%2Fhackmd.io%2FOwJgnAzAhgjArAEwLQA4pQAxICwDM4xIBGEKApktGHFESnGMDAkA%23&sa=D&sntz=1&usg=AFQjCNGcX0UWBdB-NBGeyX40kiDFg8yJeQ)) (影片)
---
### 進階組
- Day 6: 貪心法 ([pdf](https://drive.google.com/file/d/1YjhMW4tI5aq3e0hK4z4Vk4Z4e2yEOWzi/view?usp=sharing)) ([上機練習](https://www.google.com/url?q=https%3A%2F%2Fvjudge.net%2Fcontest%2F211436&sa=D&sntz=1&usg=AFQjCNG8Lp9bp9OEswVnvQTdFp3Jd3RKew)) ([題解](https://www.google.com/url?q=https%3A%2F%2Fhackmd.io%2Fs%2FBJSg9cHUM&sa=D&sntz=1&usg=AFQjCNFr4XW2UTb-djQVf9_EIZNTSRpaSg)) (影片)
- [練習套題 \[日常的日常 \]](https://www.google.com/url?q=https%3A%2F%2Fl.facebook.com%2Fl.php%3Fu%3Dhttp%253A%252F%252Fcodeforces.com%252FgymRegistration%252F101666%252Fvirtual%252Ftrue%26h%3DATNwQtim_J1fr0ODvwu_5fMdeuqw-UeL5iL0_kwjcJDyNVsPur1Nh1BE6wNEQvXdY2dapazEoTENQ3-x6YGnmWuhkC6KElJlkcZb68h5rLuvlasNb6Nl2oqwK5NKA32Tl4UxZj3fYpLFWrB6vNdw1SAdZigQVglmLojGDVhFde0_Wt8_osf0WnMhT4f90udA9xD31YXQr7xFwgZYxrZ-4shpdSWnV-rQXc3YKs8aCbFE8aBbj32Bmw&sa=D&sntz=1&usg=AFQjCNF6keuZpChStesCP41QVJOWbMK1Dg)
- Day 7: 數學工具 ([slide](https://www.google.com/url?q=https%3A%2F%2Fhackmd.io%2Fp%2FS1zxxteIG%23%2F&sa=D&sntz=1&usg=AFQjCNELO9MidubbWg_c3bnjTaufDnmerA)) ([上機練習](https://www.google.com/url?q=https%3A%2F%2Fvjudge.net%2Fcontest%2F211705%23overview&sa=D&sntz=1&usg=AFQjCNEWBjT4IWXHKbHxgEvMA07XAgrt4Q)) ([題解](https://www.google.com/url?q=https%3A%2F%2Fhackmd.io%2FMYIwnCDskGwCwFoYBMCGAOBcZmAsAjMogGYAMwqBqqJcApiAUA%3D%3D%23&sa=D&sntz=1&usg=AFQjCNErX5XBGxzHUNa_KU49psP8Z37Yxg))
- Day 8: 自動機與字串們 ([slide](https://docs.google.com/presentation/d/1gOoIElQz9NhlvRNzjGSxJTdclNj5Po5xSkRzNn5ndvo/edit#slide=id.p)) ([上機練習](https://www.google.com/url?q=https%3A%2F%2Fvjudge.net%2Fcontest%2F211940&sa=D&sntz=1&usg=AFQjCNF3GGKm9qAK5Y9mamxK7tY9PuE1eg)) ([題解](https://www.google.com/url?q=https%3A%2F%2Fhackmd.io%2FEYdgbMAmAcDGAMBaaAzAhgRkQFmPJw2GATIpCNAKzCVjayEDMQA%3D&sa=D&sntz=1&usg=AFQjCNFhoudHMuGg4CHJZtRomaCy8v43KA))
- [練習套題 \[無盡的日常\]](https://www.google.com/url?q=https%3A%2F%2Fl.facebook.com%2Fl.php%3Fu%3Dhttp%253A%252F%252Fcodeforces.com%252FgymRegistration%252F101620%252Fvirtual%252Ftrue%26h%3DATMUW16U1SbtK6CLFYVo40X3NiwaVRCyVgze43TC2ENKKKO5W2pD-f77XVVgxdC9GV15wLCbSlBVSiXD_YuG8UZDQO7NRGyHVVE6HiLWdE-L33bHX9YpypfArwq3bTNUGI35bz0F9EypshxZKQZOnvbf_MkvLjEMe9ue_3LnbmduAf1EPpoKQMXuY22rNiOkF1rdwftD2JIte0q0CmmdjPV6B6iEarRs7k6qmK4&sa=D&sntz=1&usg=AFQjCNFykK4SbQU8jeXTwJrznZGG-Sh40A)
- Day 9: 高級的DP ([slide](http://www.google.com/url?q=http%3A%2F%2Fslides.com%2Fhank55663%2Fdeck%23%2F&sa=D&sntz=1&usg=AFQjCNEK4dFoIES4A5NgCuMKXHWpgR_Hcg)) ([上機練習](https://www.google.com/url?q=https%3A%2F%2Fvjudge.net%2Fcontest%2F212091&sa=D&sntz=1&usg=AFQjCNEYKwIYNA5MS0TMFgfk7b_3W0O7og)) ([題解](https://www.google.com/url?q=https%3A%2F%2Fhackmd.io%2FMYRgTAJgZgLAHHAtAQwKwAYaJhZBTROAdnREQhgCMA2ATjwfWWTiA%3D%3D%3D%3Fview&sa=D&sntz=1&usg=AFQjCNEnvDvbsQtpL1h8O3xI1HED7Tk-JQ))
- Day 10: 高級的圖論 ([slide](https://goo.gl/idbPuV))
---
## 二分搜 Day1
- [PDF]
- [上機練習]
- [題解]
### 整理筆記
演算法
Big O 時間複雜度
- 二分搜尋
快速找東西,全部找過一遍 O=n
單調性
輸入:一堆有單調性的資料
輸出:符合條件的第一筆或最後一筆
作法:每次取中間值,尋找範圍小一半
big O(log n)
```clike=
int Binary_Search () {
int L=0, M, R=INF;
while (R-L >1) {
M=(L+R)/2;
if (check(M)) {
L=M;
} else {
R=M;
}
}
return L;
}
```
競賽會評估時間複雜度,簡單解法比較好
輸入輸出 C-style input/output
格式化 scanf fscanf sscanf
格式化輸出 printf fprintf sprintf
非格式化輸出~~gets~~(remove from C++14 fgets
非格式化輸出 puts, fputs
直接輸入輸出 getchar, putchar
Formatted i/o
%% 一個%
%c一個字元或一堆資院
%s一個沒有空白的字串
%[set] 一個只包含set的字元的字串 ,若要寫成不包含 :%^[set]
Ex %[^0-9] 存一個沒有0-9的字串
%[][] 右括弧先
%d %i %u(無符號) %o %x 一個整數
%0d可以輸出binary
%a %e(十進位科學記號) %f %lf(倍準) %g 一個符點數
scanf吃進的東西是pointer
%-3d靠左-3格
%f.1 小數點後一位
ex %010.3f 補0補到10格
stream-base i/o
std::cin, std::cout
std::getline std::iostream::getline
<iomanip>:std::setw std::setfill std::setprecision
常見題性
輸入t筆測資,輸出到底幾位
輸出直到eof
EOF:檔案結尾 EOF=-1 是一個巨集
二分搜
要有單調性
輸入整行字串
fgets(word, 128, stdin); 包含空白
c++
getline(cin, name);
輸入以空白分隔的數列
sscanf
string stream (c++)
檔案輸入輸出
freopen
fopen
c++
fstream
cplusplus.com
&a對a這個變數取位置
while(t--) {
xxxx
}
scanf return 1 2 -1(EOF)
while (~(scanf())) 等同於 while (scanf()!=-1)
EOF ctrl D linux/ ctrl Z windows
using namespace std;
c++ cin cout
cin >> n;
cin >> n >> m;
cout << n
cout << sum << '\n' << flush
cout << sum << endl
~~gets~~ puts
fgets(buffer, 128, stdin)
getchar putchar
stdin stdout stderr
c++
string s;
getline(cin,s);
會自己分配記憶體
cin.getline() ???好像很類似scanf ,會跳過space
換行
getchar
windows \r\n
linux \n
sscanf(str, "%d", )
c++
#include <iostream>
stringstream ss;
ss << input ;
while (ss>>num) {}
cout << num << endl
Ex
stringstream ss(s)
while (ss >> a)
c++
auto 型別
ex
auto f = fopen("in.txt", "r");
ifstream fin("in.txt")
fin.close()
cin cout VS printf scanf
cin cout 速度其實差不多,但有時比較慢
字串會差不多,
時間會有差是差在endl
因為中間會跑很多層,會累積到一定數量再輸出
c++ 裡,加上endl 會清掉
cout << n << endl 代表清空,丟到螢幕上
ios_base::sync_with_std(false);
只能用c或c++
cin.tie(NULL); 不要和endl同時用
加上面兩行可以加快速度
[PDF]:https://drive.google.com/file/d/12n-7wQRKTvFtCwddk9UVrgCieCYyOlwr/view
[上機練習]:https://vjudge.net/contest/210524
[題解]:https://hackmd.io/s/rknuUZkLz#
## 資料結構&stl Day2
[slide] [上機練習]
[slide]:http://slides.com/deror1869107/deck-4#/
[上機練習]:https://vjudge.net/contest/210601
## 窮舉法Day3
[slide](https://www.google.com/url?q=https%3A%2F%2Fhackmd.io%2Fp%2FryGTJ8nrM%23%2F&sa=D&sntz=1&usg=AFQjCNGH7PXHP8TjC0eFRMMxV0q7F9gF7Q)
遞迴 迴圈
考慮一個int x,算 x^n mod m
觀察規律
n&1
inline int f(x) { return x*x; }
inline 會使後面的展開
暴力演算法
快速冪(較難)
剪枝
八后問題
雙向BFS
## 分智法Day4
快速冪
合併排序
- 分解 左子 右子
- 解決 數列剩一個元素,甚麼都不用做
- 合併 左右都排序好,甚麼都不用做
最近點對
- 分解 分成n/2的左右半邊
- 解決 答案是只剩兩點的距離
- 合併 答案有三種,左半、右半、跨邊點對 把三種可能的答案取min
題目
- 10245
- 10750
- 11378
- Codeforce 429D
## DP Day 5
1<n<10^5