競賽程式簡介
PCC
講師介紹
張秉中
327
常用handle : PCC,s10755168
北市賽二等獎,全國賽二等獎
出題群唯一不是國手的
因為時間超級緊所以很多內容會用學長的簡報><
競賽程式簡介
校隊能幹嘛?
學長的簡報
但是有一些資訊有變動
- 校隊複賽時間 : 10/2(二)
- 校隊人數計算方式 (from 111年簡章):
- \(max([\frac{班級數}{10}]-1,2) + (有數資or資訊or科學班?4:0)\)
- 簡單說就是我們應該要有11+3人
- 然後去年有拿到一二等獎的外加進來
- 全國賽台北區人數變10人
各種比賽
通常都有食物跟獎金
推!
成大賽 | 8月 | 團體賽,可能要請其他人介紹? |
YTP | 8月 | 團體賽,有食物(披薩,雞塊,飲料),前幾十名可以做專題 |
HP codewars | 10月 | 今年好像是團體賽,報名快截止了。 日期好像撞到高三的英聽? |
ISSC | 12月(? | 團體賽,在東海大學 題目很怪,有些沒有測資範圍 詭異情況(給錯帳號密碼,submit到別隊讓他們AC) |
NPSC | 12月 | 線上比初賽,每校最多三隊。決賽在台大比,有食物跟非常好獎品+獎狀 題目非常好 |
實體比賽們
各種線上比賽
線上比賽
關於演算法
演算法是啥?
algorithms
演算法是給電腦的一連串明確的步驟跟指令,然後它可以照著做得到你要求的東西
例如 :
- 給定兩個三維向量 \(a,b\) ,求 \(a \cdot b\)
- 其中 \(a,b\) 的各個維度的值 \(\leq 100\)
- 或者是給你一個凸\(N\)邊形的點要你算面積
- 其中各點的 \(x,y\) 座標 \(\le 1000,N \le 100\)
競賽程式
- 競賽程式需要在輸入的條件下,設計一個演算法來讓電腦輸出需要的答案
- 通常都會一定的資料範圍限制
- 像是 \(N,M \leq 3939\) 之類的
- 通常好好寫的話不會超過 250 行
- (少部分題目例外)
- 還是要練習實作能力,不然寫錯會瘋狂debug到哭
- 大多數會有即時回饋告訴你對了還是錯了
- APCS,meta hackercup 例外
- 通常不會牽涉到作業系統相關的內容
- 會要求程式只能使用一定量以內的時間,空間
online judge
- 線上評測系統
- 幫你測試程式碼是不是好的
- 通常刷題都在這裡刷
- 例子:
簡易C++教學
如果會其他語言但是跟c++不熟的話
輸入輸出
注意>>跟<<不要打反
#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;
cout<<"Hello, my class number is "<<n<<endl;
return 0;
}
for 與 if
#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;
int a = 0;
for(int i = 0;i<n;i++){
if(i != 0){
a += i;
}
if(i == 2){
continue;
}
if(i == n-1){
break;
}
}
cout<<a<<endl;
return 0;
}
函式
#include <iostream>
using namespace std;
int f(int k){
if(k == 1)return 1;
if(k == 2)return 1;
return f(k-1)+f(k-2);
}
int main(){
cout<<f(20);
}
data types
資料們
#include <iostream>
using namespace std;
int main(){
int a;
bool b;
char c;
double d;
float f;
long long l;
}
array
陣列們
#include <iostream>
using namespace std;
int main(){
int a[3] = {1,2,3};
bool b[4] = {0,0,0,1};
char c[] = "HIHI";
double d[3];
float f[2];
int n;
cin>>n;
long long l[n];//不保證可以用!要動態改變長度用vector<>
for(int i = 0;i<n;i++)cin>>l[i];
for(int i = 0;i<n;i++)cout<<l[i]<<' ';cout<<endl;
}
其他的東西之後會再講
或者是可以看這裡
一些簡單的暖身
跟正常寫程式不同的地方
以及一些剛開始會常犯的錯誤
- io優化
- ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
- 全域變數空間比較大
- 整數範圍:
- int : \(2147483647 \sim -2147483648 (2\times10^9\))
- long long : \(9\times 10^{18}\)
- #include <bits/stdc++.h>
練習!
練習!
教學資源
- 從零開始的演算法競賽入門教學 : 簡易入門
- Competition Handbook : 英文,基礎演算法與入門
- 2016 建中校內培訓講義 : 中文,後面內容偏難
- CP-Algorithms : 英文,比較深或罕見的知識可以在這裡看
- OI Wiki : 簡體中文,範圍很大,各種資料都有
- USACO Guide : 英文,有題目跟有趣的內容
- 建中讀書會簡報 : 跟著上可以學到不少東西
練習!
課程
練習!
OJ
- zerojudge : 題目範圍很廣,有基礎題可以練習
- CSES : 經典題百科全書
-
atcoder + kenkoooo:
找工作,ABC可以練語法跟基礎演算法 - TIOJ : 建中資訊社的OJ,有很多進階題可以練
- codeforces : 很多題目可以練習,而且有分難度
- oj.uz + OI Checklist : vir OI用
- CS Academy : 有不少有趣題,難度大約等於解出人數
yukicoder : 來學日文OJDL : 建中讀書會模擬競賽用,有一些不錯的題跟模板題
複雜度分析
遞迴與二分搜
更多題目
競程簡介
By Ping Chung Chang
競程簡介
- 596