演算法初探

算法班?

程式演算的"思維"

用以提高程式效率

!= 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)

遞迴

STL

關於競賽

部份分(子題)

有些比賽題目會給部份分

部份分通常是原本題目的簡化版本,讓參賽者能拿到一些比較少但簡單的分數

當你對原始題目沒想法時,善用子題去得分,同時也可以透過子題的引導來想到正解

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