---
tags: Training
---
# 2021 NTOU summer training (beginner)
## [任何問題提問](https://forms.gle/xKAVwgY1euLV8whL9)
## 0729
* [上課影片](https://youtu.be/rAT617toV6E)
* [複雜度](https://hackmd.io/@Y68gNOsdTxGvsBZNTbpKqQ/HJfFfsh-B)
* [Standard Template Library](https://hackmd.io/@Y68gNOsdTxGvsBZNTbpKqQ/ryio2gTZS)
:::spoiler 題單
* stack
[ZJ b923](https://zerojudge.tw/ShowProblem?problemid=b923)
[ZJ c123](https://zerojudge.tw/ShowProblem?problemid=c123)
* map/set
[ZJ d492](https://zerojudge.tw/ShowProblem?problemid=d492)
[ZJ d885](https://zerojudge.tw/ShowProblem?problemid=d885)
[ZJ a091](https://zerojudge.tw/ShowProblem?problemid=a091)
* priority_queue
[ZJ b606](https://zerojudge.tw/ShowProblem?problemid=b606)
* sorting
[ZJ a528](https://zerojudge.tw/ShowProblem?problemid=a528)
* nth_element
[ZJ d476](https://zerojudge.tw/ShowProblem?problemid=d476)
:::
## 0804
* [上課影片](https://youtu.be/0WeUvhh3z1k)
* [DP](https://hackmd.io/@Y68gNOsdTxGvsBZNTbpKqQ/SJCIN4GMr#/)
:::spoiler 題單
[ZJ a133](https://zerojudge.tw/ShowProblem?problemid=a133)
[ZJ d784](https://zerojudge.tw/ShowProblem?problemid=d784)
[ZJ c112](https://zerojudge.tw/ShowProblem?problemid=c112)
[ZJ a144](https://zerojudge.tw/ShowProblem?problemid=a144)
[ZJ d378](https://zerojudge.tw/ShowProblem?problemid=d378)
[ZJ a587](https://zerojudge.tw/ShowProblem?problemid=a587)
[ZJ c001](https://zerojudge.tw/ShowProblem?problemid=c001)
:::
## 0811
* [上課影片](https://youtu.be/NKycp3HcP90)
* [greedy](https://hackmd.io/@giver/By_xYVtMr#/)
::: spoiler 題單
[Dandanjudge a071](http://203.64.191.163/ShowProblem?problemid=a071)
[Dandanjudge a073](http://203.64.191.163/ShowProblem?problemid=a073) 題目裡的[提示連結](https://web.ntnu.edu.tw/~algo/AlgorithmDesign.html)是爛的
[Dandanjudge a074](http://203.64.191.163/ShowProblem?problemid=a074)
[Dandanjudge a075](http://203.64.191.163/ShowProblem?problemid=a075)
[Dandanjudge a076](http://203.64.191.163/ShowProblem?problemid=a076)
[Dandanjudge a078](http://203.64.191.163/ShowProblem?problemid=a078)
[Dandanjudge a079](http://203.64.191.163/ShowProblem?problemid=a079)
[Dandanjudge a080](http://203.64.191.163/ShowProblem?problemid=a080)
[Dandanjudge a081](http://203.64.191.163/ShowProblem?problemid=a081)
[Zerojudge b606](https://zerojudge.tw/ShowProblem?problemid=b606)
[Zerojudge b231](https://zerojudge.tw/ShowProblem?problemid=b231)
[Zerojudge c471](https://zerojudge.tw/ShowProblem?problemid=c471)
:::
## 0818
* [上課影片](https://youtu.be/TNk-JsfxZLA)
* [binary search](https://hackmd.io/@Y68gNOsdTxGvsBZNTbpKqQ/SkBLJSmQS#/)
:::spoiler 題單
* binary search
[Zerojudge d732](https://zerojudge.tw/ShowProblem?problemid=d732)
[Zerojudge c575](https://zerojudge.tw/ShowProblem?problemid=c575)
[Zerojudge c942](https://zerojudge.tw/ShowProblem?problemid=c942)
[Dandanjudge a120](http://203.64.191.163/ShowProblem?problemid=a120)
[Dandanjudge a121](http://203.64.191.163/ShowProblem?problemid=a121)
[Dandanjudge a122](http://203.64.191.163/ShowProblem?problemid=a122)
[Codeforces 1251D](https://codeforces.com/contest/1251/problem/D)
[Codeforces 1436C](https://codeforces.com/problemset/problem/1436/C)
* ternary search
[SPOJ KOPC12A](https://www.spoj.com/problems/KOPC12A/)
[Codeforces 578C](https://codeforces.com/contest/578/problem/C)
[Codeforces 1355E](https://codeforces.com/contest/1355/problem/E)
[Codeforces 1301B](https://codeforces.com/contest/1301/problem/B)
:::
## 0825
* [上課影片](https://youtu.be/A51xibuoIIE)
* [divide and conquer](https://hackmd.io/@Y68gNOsdTxGvsBZNTbpKqQ/rJLwuclVr#/)
* [最近點對教學](https://oi-wiki.org/geometry/nearest-points/)
:::spoiler 題單
[Zerojudge a233](https://zerojudge.tw/ShowProblem?problemid=a233)(實作merge sort)
[Zerojudge a233](https://zerojudge.tw/ShowProblem?problemid=a233)(實作quick sort)
[Zerojudge a638](https://zerojudge.tw/ShowProblem?problemid=a638)
[Zerojudge d542](https://zerojudge.tw/ShowProblem?problemid=d542)
[Codeforces gym 102569G](https://codeforces.com/gym/102569/problem/G)
[Codeforces 1111C](https://codeforces.com/contest/1111/problem/C)
[Codeforces 873D](https://codeforces.com/contest/873/problem/D)
:::
::: spoiler 最近點對sample code
```cpp=
// 最近點對
#include<bits/stdc++.h>
#define double long double
#define INF 1'000'000'000
#define MXN 3'000'005
using namespace std;
struct pt{
double x,y;
}arr[MXN],sorted_y[MXN];
struct cmp_x{
bool operator ()(const pt& lhs,const pt& rhs){
if(lhs.x != rhs.x) return lhs.x < rhs.x;
return lhs.y < rhs.y;
}
};
struct cmp_y{
bool operator ()(const pt& lhs,const pt& rhs){
if(lhs.y != rhs.y) return lhs.y < rhs.y;
return lhs.x < rhs.x;
}
};
int n;
double ans=INF;
pt Left[MXN],Right[MXN],tmp[MXN];
inline double dist(int i,int j){
return sqrt((arr[i].x-arr[j].x)*(arr[i].x-arr[j].x)+(arr[i].y-arr[j].y)*(arr[i].y-arr[j].y));
}
inline double dist(const pt& lhs,const pt& rhs){
return sqrt((lhs.x-rhs.x)*(lhs.x-rhs.x)+(lhs.y-rhs.y)*(lhs.y-rhs.y));
}
void merge(int l,int r){
int mid = (l+r)/2;
int l_num=0,r_num=0;
for(int i=l;i<=mid;i++){
if(abs(sorted_y[i].x-arr[mid].x)<ans){
Left[l_num] = sorted_y[i];
l_num++;
}
}
for(int i=mid+1;i<=r;i++){
if(abs(sorted_y[i].x-arr[mid].x)<ans){
Right[r_num] = sorted_y[i];
r_num++;
}
}
for(int i=0,j=0;i<l_num;i++){
while(j+1 < r_num && Left[i].y > Right[j].y){
j++;
}
for(int k=j;k<r_num && abs(Left[i].y-Right[k].y)<ans;k++){
ans = min(ans, dist(Left[i],Right[k]));
}
}
for(int i=0,j=0;i<r_num;i++){
while(j+1 < l_num && Right[i].y > Left[j].y){
j++;
}
for(int k=j;k<l_num && abs(Right[i].y-Left[k].y)<ans;k++){
ans = min(ans, dist(Right[i],Left[k]));
}
}
int l_id=l,r_id=mid+1,id=0; //merge sort
while(l_id<=mid && r_id<=r){
if(sorted_y[l_id].y < sorted_y[r_id].y){
tmp[id++] = sorted_y[l_id++];
}
else{
tmp[id++] = sorted_y[r_id++];
}
}
while(l_id<=mid) tmp[id++]=sorted_y[l_id++];
while(r_id<=r) tmp[id++]=sorted_y[r_id++];
for(int i=l;i<=r;i++) sorted_y[i] = tmp[i-l];
}
void closest_pair(int l,int r){
if(r-l<=3){
for(int i=l;i<=r;i++){
for(int j=i+1;j<=r;j++){
ans=min(ans,dist(i,j));
sort(sorted_y+l,sorted_y+r+1,cmp_y());
}
}
return;
}
int mid = (l+r)/2;
closest_pair(l,mid);
closest_pair(mid+1,r);
merge(l,r);
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);
cin>>n;
for(int i=0;i<n;i++){
cin>>arr[i].x>>arr[i].y;
sorted_y[i] = arr[i];
}
sort(arr,arr+n,cmp_x());
closest_pair(0,n-1);
cout<<fixed<<setprecision(4)<<ans<<endl;
return 0;
}
// merge sort 的 merge
vector<int> merge(vector<int> left,vector<int> right){
vector<int> ret;
int left_index=0;
int right_index=0;
while(left_index < left.size() && right_index < right.size()){
if(left[left_index] < right[right_index]){
ret.push_back(left[left_index]);
left_index++;
}
else{
ret.push_back(right[right_index]);
right_index++;
}
}
while(left_index < left.size()) ret.push_back(left[left_index++]);
while(right_index < right.size()) ret.push_back(right[right_index++]);
return ret;
}
```
:::
## 0831
* [上課影片](https://youtu.be/dtdCKpnABgo)
* [競賽技巧](https://hackmd.io/@jakao/cp_trick)
## 0901
* [上課影片](https://youtu.be/sAGm-ToOknk)
* [graph](https://hackmd.io/@giver/Sy4HuHENB#/)
:::spoiler 題單
[Zerojudge b108](https://zerojudge.tw/ShowProblem?problemid=b108)
[Zerojudge a584](https://zerojudge.tw/ShowProblem?problemid=a584)
[Zerojudge a586](https://zerojudge.tw/ShowProblem?problemid=a586)
[Zerojudge a290](https://zerojudge.tw/ShowProblem?problemid=a290)
[Zerojudge d768](https://zerojudge.tw/ShowProblem?problemid=d768)
[Zerojudge e584](https://zerojudge.tw/ShowProblem?problemid=e584)
[Zerojudge c124](https://zerojudge.tw/ShowProblem?problemid=c124)
[Zerojudge e699](https://zerojudge.tw/ShowProblem?problemid=e699)
:::
## 0908
* [上課影片](https://youtu.be/NSw039-4Iic)
* [tree](https://hackmd.io/@giver/BySfEFtVH#/)
* [union-find](https://hackmd.io/@jakao/disjoint_set)
:::spoiler 題單
[Zerojudge c463](https://zerojudge.tw/ShowProblem?problemid=c463)
[Zerojudge b517](https://zerojudge.tw/ShowProblem?problemid=b517)
[Zerojudge b518](https://zerojudge.tw/ShowProblem?problemid=b518)
[Dandanjudge a144](http://203.64.191.163/ShowProblem?problemid=a144)
[Dandanjudge a445](https://zerojudge.tw/ShowProblem?problemid=a445)
[Uva 11987](https://onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=3138)
:::