競賽程式簡介

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月 線上比初賽,每校最多三隊。決賽在台大比,有食物跟非常好獎品+獎狀
題目非常好

實體比賽們

各種線上比賽

線上比賽

atcoder(每周一次)

codeforces(均攤每周一~兩次)

Meta Hacker Cup(每年一次)

各種OI的線上mirror(CEOI,JOISC,COCI...)

關於演算法

演算法是啥?

algorithms

演算法是給電腦的一連串明確的步驟跟指令,然後它可以照著做得到你要求的東西

 

例如 :

  • 給定兩個三維向量 \(a,b\) ,求 \(a \cdot b\)
    • 其中 \(a,b\) 的各個維度的值 \(\leq 100\)
  • 或者是給你一個凸\(N\)邊形的點要你算面積
    • 其中各點的 \(x,y\) 座標 \(\le 1000,N \le 100\)

競賽程式

  • 競賽程式需要在輸入的條件下,設計一個演算法來讓電腦輸出需要的答案
  • 通常都會一定的資料範圍限制
    • 像是 \(N,M \leq 3939\) 之類的
  • 通常好好寫的話不會超過 250 行
  • 大多數會有即時回饋告訴你對了還是錯了
    • 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>

練習!

練習!

教學資源

練習!

課程

  • 建中讀書會
  • APCS Camp : 內容跟難度大致上跟校隊複賽前的培訓差不多
  • 資訊之芽
  • IONCamp
  • IOICamp : 各式各樣的各種有趣技巧都會教,有些課程會拆成初階進階來分。每天晚上比賽。

練習!

OJ

  • zerojudge : 題目範圍很廣,有基礎題可以練習
  • CSES : 經典題百科全書
  • atcoder + kenkoooo: 找工作,ABC可以練語法跟基礎演算法
  • TIOJ : 建中資訊社的OJ,有很多進階題可以練
  • codeforces : 很多題目可以練習,而且有分難度
  • oj.uz + OI Checklist : vir OI用
  • CS Academy : 有不少有趣題,難度大約等於解出人數
  • yukicoder : 來學日文
  • OJDL : 建中讀書會模擬競賽用,有一些不錯的題跟模板題

複雜度分析

學長的簡報

遞迴與二分搜

學長的簡報

更多題目

  • 二分搜
    • 「基本上 CF 難度 1200以下到處戳都有」-pring
  • 遞迴

競程簡介

By Ping Chung Chang