---
# System prepended metadata

title: 資訊程式競賽培訓1

---

# 資訊科技培訓

---

## 講師介紹
高三11 郭冠希、高三2 陳秉華


----

## 學程式競賽有什麼用
最簡單的：**對大學升學有幫助！**
剩下的留後面課堂介紹
![](https://i.imgur.com/avqlFdR.png)

---

## 課程安排
----
|   4/8    |   4/15   |   4/22   |
|:--------:|:--------:|:--------:|
| 競程介紹 | 程式概念 | 條件判斷 |

| 4/29 |    5/6     |    5/20    |
|:----:|:----------:|:----------:|
| 迴圈應用 | 演算法 | 競賽與升學 |

---

## 電腦介紹
在打程式競賽之前，我們要先來了解
電腦裡的記憶體跟CPU

----

## 中央處理器(CPU)
1. CU(控制單元)
2. ALU(算數邏輯單元)

----

## 控制單元(CU)
可以想成他是個指揮官，負責處理大部分的動作
* 硬體的一部分，負責控制 
* 指示電腦系統去執行程式指令 
* 必須負責ALU和記憶體之間的溝通

----

## 算數邏輯單元(ALU)
```
當程式碼送到記憶體後，經過控制單元(CU)指揮，
送到ALU就會開始執行，執行完後會把資料傳回記憶體。
```
1. 算術AU:負責加減乘除
2. 邏輯LU:負責比較型態、處理邏輯的東東

----

## 中央處理器(CPU)
這個東東決定你程式跑得快不快
一般來說，都會以**GHz**看看能跑得多快
G$\rightarrow$$10^9$ 所以可以執行這麼多的運算
但一般不會拿整個去跑程式，所以大概就$10^8$


----

## 記憶體(RAM)
全名為「隨機存取記憶體」
可認為是暫時記憶，屬於電腦的暫時儲存裝置，
用來執行應用程式短期儲存和存取資料。
擁有更多的RAM意味著此電腦幾乎可以
瞬間存取和讀取更多資料。

----

## 那跟程式有什麼關係呢？
* 用來存放程式執行中需要用到的指令或資料 
* 只要程式正在執行當中就會一直儲存資訊
* 存放一些變數的位址與數值

----

## 圖片整理
![image](https://hackmd.io/_uploads/SkrNyCSAT.png =50%x)

---

## 程式概述
大家應該都知道電腦是二進位運作
但我們太笨了，看不懂二進位 
所以沒辦法跟電腦溝通
因此我們需要用一些程式語言來跟電腦溝通 
這樣電腦才能get到我們

----

## 各種程式語言
![image](https://hackmd.io/_uploads/rkHZWABRa.png)

----

**當然，各自的語言都有自己的用處與優點**

----

## EXAMPLES
* **C++：遊戲開發、驅動程式**
* **Python：AI、爬蟲程式、作圖**
* **Java：做模組、大型應用程式**
* **Golang：網站、專案開發**

----

## 為什麼我們要選擇C++
* 大多競賽允許C/C++
* python雖好寫但很慢，相反地C++很快
* 內建很多函式庫跟資料結構
* 語法完整，學完容易貫通其他語言

---

## 從哪裡開始寫
編譯器 可以比喻成把我們文字翻成電腦語言
大概會有兩個給初學者使用
1. DevC++
2. Codeblocks

但上面那個我覺得很舊+很破
所以我們用codeblocks （基本比賽、檢定都會附）

----

[下載連結](https://drive.google.com/file/d/1B_JvfJQHi0yJzGfQ7r7mS76qCkkA4nd2/view)

----

![image](https://hackmd.io/_uploads/rkWZUbPR6.png)

![image](https://hackmd.io/_uploads/Byvr8ZDA6.png )


----

![image](https://hackmd.io/_uploads/HJZTIbvCT.png)

![image](https://hackmd.io/_uploads/ryUgvZwCT.png =50%x)


----

![image](https://hackmd.io/_uploads/BJqIDZwA6.png)

----

![image](https://hackmd.io/_uploads/BkcADZwAp.png =120%x)
這樣就可以開始寫程式了

---

## 寫什麼題目呢？
這堂課叫資訊競賽
所以我們需要有個線上網站讓我們練比賽題目

----

## 一些常用Online Judge
* [高中生程式解題系統(Zerojudge)](https://zerojudge.tw/)
* [TIOJ](https://tioj.ck.tp.edu.tw/)
* [Codeforces](https://codeforces.com/)
* [AtCoder](https://atcoder.jp/)
* [CSES](https://cses.fi/problemset/)
* [TCIRC](https://judge.tcirc.tw/)

----

還有我們學校的[MD Judge](http://mdcpp.mingdao.edu.tw/)
已經幫大家創好帳號囉！

----

## 來介紹怎麼寫題目
看完題目後把解法寫成程式碼
丟到judge上
他會跟你說結果

----

## 結果種類

<font color="green">AC(Accepted)</font>：通過(好耶！)

<font color="red">WA(Wrong Answer)</font>：答案錯誤(測資沒通過)

<font color="gray">CE(Compile Error)</font>：編譯錯誤(請先在IDE上面編譯)

<font color="#f1c40f">RE(Runtime Error)</font>：執行時錯誤(陣列越界、除以0)

<font color="blue">TLE(Time Limit Exceeded)</font>：超時(演算法效率太差)

<font color="orange">MLE(Memory Limit Exceeded)</font>：超出空間限制


---

## 學習資源
踏入資訊領域要有個概念 
就是需要自學能力
1. Google/AI
2. 營隊
3. 專門課程

----

## 培訓講義

有太多了，列一些初學者的
[MDCPP講義](https://hackmd.io/rT602lznT6y3mvLR1IlQ0A)
[板橋高中講義](https://sites.google.com/site/pcshic/cppzero)
[AP325](https://drive.google.com/drive/folders/10hZCMHH0YgsfguVZCHU7EYiG8qJE5f-m)

----

因為學校資源不多
所以學生的合作就很重要
[一起加入MDCPP的Discord吧！](https://discord.gg/Kv7j4KqNBM)


---

## 資訊比賽的不同

不同於一般比賽
資訊比賽可以讓你隨時知道對錯
在有限時間內解出比別人多的題目是關鍵
所以要多練題目

----

放個比賽影片
[過程](https://youtu.be/ueNT-w7Oluw)
[結果](https://youtu.be/PQs-G6AO7Is?t=3643)


----

下一堂課我們就會開始教一些程式
大家可以先預習
如果你能開始寫judge那就更好了