演算法初探
算法班?
程式演算的"思維"
用以提高程式效率
!= youtube演算法
學這幹嘛?
- 解題
- 升學
實務上幾乎不會用到
目標
- apcs 5/5 -> 社課教的絕對不夠,要自己努力
- 各種程式競賽 -> 難度更高,需要自已有決心
練習方式
- 練題
- 打比賽
資源:成電dc的"酷文章"頻道
解題
- 給你一個題目,要你用程式把輸入的資料依照題目輸出答案
- 一個題目會給很多筆輸入資料,簡稱"測資"
- 題目也會給的測資的大小範圍以及執行的時限,要注意程式的效率不能太差,否則測資很大時就會超出時限

範例測資
系統背後自動執行的測資
輸入範圍
答案正確Accept:

Wrong answer:

超過時限time limit exceeded:

各種評測系統
- zerojudge
- tioj
函式複習
Return_Type Function_Name(Argument 1, Argument 2, ...){
//do something
return Return
}- 函式名稱
- 參數:函式的輸入
- 回傳:函式的輸出
數學函數:y = f(x)
遞迴
關於競賽
部份分(子題)
有些比賽題目會給部份分
部份分通常是原本題目的簡化版本,讓參賽者能拿到一些比較少但簡單的分數
當你對原始題目沒想法時,善用子題去得分,同時也可以透過子題的引導來想到正解
c++輸出入優化
cout/cin輸出入實際上是非常耗時的,有時候遇到演算法複雜度是好的但是卻拿到tle,這時可以試試開輸出入優化
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
}或者可以只用c的printf/scanf就不用開輸出入優化
long long
有時候在計算數字時會爆出int範圍,所以要開long long。
基本上可以開好開滿,對時間複雜度沒什麼影響
算法班
By alan lai
算法班
- 290