SCIST S5
演算法培訓課程
2024/10/27
南臺灣學生資訊社群
Students' Community of Information in Southern Taiwan
由嘉義、台南、高雄、屏東等四地高中生組成的學生自治資訊教育社群。
長期透過舉辦課程與活動推廣資訊領域,減少南北資訊領域的資源落差。
爲南部提供一個良好的學習環境,提升南部學生整體的資訊能力。
SCIST 總覽
行政招募
7 月
推廣課程
9 月
培訓課程
每年 10 月 ~ 隔年 6 月
多元主題工作坊(暫)
暑假
聯合營隊
寒假
資訊社團合作、社課支援
長期
行政招募

-
公關
-
文書
-
美宣
-
剪輯
-
助教
推廣課程
-
各地舉辦為期一天的體驗課程

南部多校聯合寒訓
-
課程
-
演算法
-
資訊安全
-
-
闖關活動
-
晚會表演
-
科技公司講座
-
經驗分享講座

副召籌辦心得文
(我拖到現在還沒寫完
但有一堆照片可以看)
合作社團
-
互相宣傳
-
有保證錄取名額

培訓課程
-
免費且為期一年的課程
-
演算法
-
資訊安全
-



培訓課程招生相關資料









培訓課程詳細介紹
培訓目標
- 初階班:零程式基礎 →
能熟練運用 C++ 語法,瞭解基礎資料結構與演算法,且能在 APCS 中獲得觀念題 3 級分 + 實作題 3 級分的成績,並積極參與各大程式競賽累積經驗。
- 進階班:具備 C++ 語法能力 →
瞭解進階資料結構與演算法,能在 APCS 中獲得觀念題 4 級分 + 實作題 4 級分,甚至滿級分的成績,並希望能在 YTP 少年圖靈計畫初賽中晉級程式挑戰營、國立成功大學暑期高中生程式設計邀請賽中晉級決賽、NPSC、ISSC、CodeWars…等各大程式競賽中獲獎。

講師:吳彥德(SA)
- 2006 臺南區資訊學科能力競賽第一名
- 2007 全國資訊學科能力競賽一等獎
- 2008 亞太資訊奧林匹亞金牌
- ACM ICPC 雅加達賽區第 5 名
- 曾任臺灣 Google 軟體工程師
SA 流 C++ 競程修練心法 講義作者

演算法培訓課表





結訓評分標準





請假規則
- 如需請假,請至少在 課程前一天 23:59 前填寫 請假表單
- 若當天需臨時請假請使用 SCIST Discord Ticket 功能 直接請假並說明原因
- 請假者請自行至 SCIST YouTube 觀看課程直播錄影檔補課(當週課程結束後約兩週左右將會釋出經過剪輯的精華版影片)
- 如有特殊狀況或不可抗力因素填寫完表單後可另開 Ticket 說明,若審核無誤將不計入出席率
- 若沒有請假卻無故缺席將直接取消實體學員資格
- 請假前務必先評估自身出席狀況避免無法結訓

其他注意事項
- 午餐需自理,時長為 1.5 小時。若無頭緒可參考 SCIST 美食地圖,學員若有推薦的也可在文件中自行新增內容。
- 可以自備筆電,但若無筆電,教室仍有電腦可以使用
- 任何課程相關的更動我們將透過 Discord 公告頻道、Facebook/Instagram 粉絲專頁及寄送 Email 的方式公告,請特別留意是否有時間或場地更動
- 電腦教室內嚴禁飲食,有攜帶飲料或外食請放在教室外的桌子上。教室內可以喝水但請避免灑出來,若引起任何設備損壞需自負賠償責任。
- 課堂練習時歡迎踴躍討論,但請控制音量避免影響他人。
- 課堂中如有疑問歡迎在 Discord 踴躍討論,或是向助教提問。
- 講師教課時建議先認真聽講,練習時間再用電腦實作
相關連結
- 官方網站:https://scist.org/
- Discord:https://discord.gg/vpqgyJJVKM
- Facebook:https://www.facebook.com/scist.tw/
- Instagram:https://www.instagram.com/scist.tw/
- YouTube:https://www.youtube.com/c/OfficialSCIST
- Linktree(連結彙整、其他表單):https://linktr.ee/scist.tw
- Email(課程相關):courses@scist.org
- Email(官方、贊助相關):official@scist.org
還記得進階班報名時寫的小測驗嗎?

先來看看大家的解法
1. 排序後取頭尾
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int a[N];
int main()
{
int n; cin >> n;
for(int i=0; i<n; i++) cin >> a[i];
sort(a, a+n);
cout << a[0] << ' ' << a[n-1] << ' ' << a[0] * a[n-1] << '\n';
return 0;
}2. 用 STL 的 algorithm:min_element/max_element
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, num;
vector<int> v;
cin >> n;
for(int i=0; i<n; i++){
cin >> num;
v.push_back(num);
}
int mi = *min_element(v.begin(), v.end());
int mx = *max_element(v.begin(), v.end());
cout << mi << ' ' << mx << ' ' << mi * mx << '\n';
return 0;
}一半的人沒注意到的地方


Overflow 溢位

我的解法,不用 sort 或 max_element( ):
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, t, mi = 1e9, mx = -1e9; cin >> n;
while(n--)
{
cin >> t;
mx = max(mx, t);
mi = min(mi, t);
}
cout << mi << ' ' << mx << ' ' << (long long)mi * mx << '\n';
}極值設範圍、不開陣列、每讀一個直接更新不用寫 if、不開第三個變數而是直接強制轉型成 long long 後再相乘
我們來比較一下不同做法的時間複雜度
(下午的課會詳細的教到)
1. sort 後取頭尾
2. max_element( )
3. 讀入時用變數維護極值
O(n log n)
O(n)
O(n)

提問時間

歡迎大家直接舉手提問或使用線上匿名提問平台
自由時間
-
認識身邊的學員、交流討論
-
看看講義、資源彙整、剛剛介紹的內容
-
練習題單
直接開卷 -
確認自己有沒有收到 SCIST Courses 寄的信件
-
確認自己有沒有 SCIST Discord 身份組

SCIST_1027
By 4yü
SCIST_1027
- 339