# 2025 NCKU CSIE Program Design II - Midterm
## Scoring
| 答對 1 題 | 答對 2 題 | 答對 3 題 | 答對 4 題 | 答對 5 題 | 答對 6 題 |
| ---- | ---- | ---- | --- | --- | --- |
| 20 分 | 40 分 | 60 分 | 80 分 | 90 分 | 100 分 |
## Problem
### Problem A - 東邊日出西邊雨 (30%)
#### Problem Statement
「東邊日出西邊雨,南極企鵝北極熊」告訴我們東邊日出時南極有企鵝,西邊下雨時北極也有北極熊。南極的企鵝某一天想要前往北極見到他的好麻吉北極熊,但是北極實在是太遠了,企鵝可能需要花好幾天才能走到。為此,企鵝決定要花一點時間規劃行程。
已知南極到北極的距離總共為 $n$ 公里,接下來企鵝共規劃了 $m$ 天的行程,每天企鵝會走 $a_i$ 公里,現在我們想要知道企鵝如果會抵達目的地的話,他總共會需要花幾天才能到達北極。請你設計一個程式來計算!(如果到達不了則輸出 `-1`)
#### Input Format
```
n m
a_1 a_2 a_3 ... a_m
```
#### Output Format
```
days
```
#### Input Limit
輸入限制是指我們測試你的程式時會保證的一個輸入範圍,你的程式不需要對此做額外判斷。
- $1 \le n \le 10^6$
- $1 \le m \le 1000$
- $1 \le a_i \le 10^6$
#### Sample Input 1
```
5 2
1 2
```
#### Sample Output 1
```
-1
```
#### Sample Input 2
```
10 5
1 2 3 4 5
```
#### Sample Output 2
```
4
```
#### Sample Input 3
```
100 3
1000 1000 1000
```
#### Sample Output 3
```
1
```
---
### Problem B. 資訊系大車隊
成大資訊系有著非常著名的腳踏車隊,這一個車隊以在腳踏車上放置不同顏色的小喇叭聞名,這一個小喇叭
非常雖然看起來很小,但卻有著非常驚人的音量,第一次按的人都會大吃一驚。

某天車隊想要在光復校區練車,不過光復校區的雲平大道旁邊是管理學院的教學場地,因此在他們練車時是無法任意的亂按喇叭的,不過這樣讓車隊的隊長非常困擾,既然都來了就應該開心練車啊,還要被有所限制實在很小氣。為了解決這個問題隊長搜集了管理學院接下來 $n$ 天的教學資訊,以方便他們排定練車計畫。
已知接下來 $n$ 天每天都有 $a_i$ 堂課在管理學院進行,且當天超過 $m$ 堂課就不適合練習。
為了保有練習的效率,隊長希望能夠選出「剛好」連續 $k$ 天來練習,請你設計一個程式計算共有幾種選擇。
#### Input Foramt
```
n m k
a_1 a_2 ... a_n
```
#### Input Limit
- $1 \le k \le n \le 1000$
- $1 \le a_i, m \le 10^9$
#### Outut Format
```
ans
```
#### Sample Input 1
```
5 3 2
10 2 3 1 4
```
#### Sample Output 1
```
2
```
#### Description Sample 1
可以選擇第二天與第三天練習或第三天與第四天練習,因此共 2 種可能。
#### Sample Input 2
```
5 5 3
1 2 3 4 5
```
#### Sample Output 2
```
3
```
#### Description Sample 2
可以選擇第 1-3 天、第 2-4 天或第 3-5 天練習,因此共 3 種可能。
#### Sample Input 3
```
5 2 2
3 3 3 3 3
```
#### Sample Output 3
```
0
```
#### Description Sample 3
沒有任何連續 2 天適合練習,因此答案為 0。
#### Sample Input 4
```
5 4 1
1 2 3 4 5
```
#### Sample Output 4
```
4
```
#### Description Sample 4
只有第 5 天不適合練習,因此有 4 天可以選擇。
#### Sample Input 5
```
5 3 5
1 2 3 4 5
```
#### Sample Output 5
```
0
```
#### Description Sample 5
沒有任何連續 5 天都適合練習,因此答案為 0。
#### Sample Input 6
```
5 3 2
3 3 3 3 3
```
#### Sample Output 6
```
4
```
#### Description Sample 6
每天都有剛好 3 堂課,所以每天都適合練習。可以選擇第 1-2 天、第 2-3 天、第 3-4 天或第 4-5 天練習,因此共 4 種可能。
---
### Problem C. 回文
一個字串如果正著讀和反著讀都一樣,就稱為回文。請設計一個程式來判斷給定的字串是否為回文。
#### 輸入格式
```
s
```
#### 輸入限制
- 字串長度保證不超過 500。
#### 輸出格式
```
YES 或 NO
```
#### 範例輸入 1
```
apple
```
#### 範例輸出 1
```
NO
```
#### 範例說明 1
字串 "apple" 不是回文,因為正著讀和反著讀不一樣。
#### 範例輸入 2
```
abba
```
#### 範例輸出 2
```
YES
```
#### 範例說明 2
字串 "abba" 是回文,因為正著讀和反著讀都一樣。
#### 範例輸入 3
```
racecar
```
#### 範例輸出 3
```
YES
```
#### 範例說明 3
字串 "racecar" 是回文,因為正著讀和反著讀都一樣。
#### 範例輸入 4
```
hello
```
#### 範例輸出 4
```
NO
```
#### 範例說明 4
字串 "hello" 不是回文,因為正著讀和反著讀不一樣。
#### 範例輸入 5
```
a
```
#### 範例輸出 5
```
YES
```
#### 範例說明 5
單一字元必定是回文。
#### 範例輸入 6
```
madam
```
#### 範例輸出 6
```
YES
```
#### 範例說明 6
字串 "madam" 是回文,因為正著讀和反著讀都一樣。
---
### Problem D. 霍格華茲的骰子課
#### 題目描述
霍格華滋的麥教授決定開一門名為「魔法骰子」的課程,這一門課程會教授許多骰子的奧秘。
已知骰子有一個長度為 $n$ 的序列 $a$,這一個序列中的每一個數字 $a_i$ 表示骰子可能的點數。某位學生使用咒語「速速前」(Accio) 來擲骰子,骰子總共有 $3$ 顆,請問這位學生骰出來的點數總共有幾種可能?
#### 輸入格式
```
n
a_1 a_2 ... a_n
```
#### 輸入限制
- $1 \le n \le 500$
- $1 \le a_i \le 1000$
#### 輸出格式
```
ans
```
#### 範例輸入 1
```
3
1 2 3
```
#### 範例輸出 1
```
7
```
#### 範例輸入 2
```
2
1 2
```
#### 範例輸出 2
```
4
```
#### 範例說明 2
可能的點數組合為:
1+1+1=3
1+1+2=4
1+2+2=5
2+2+2=6
總共有 4 種不同的點數。
#### 範例輸入 3
```
4
1 2 3 4
```
#### 範例輸出 3
```
10
```
#### 範例說明 3
可能的點數組合為:
1+1+1=3
1+1+2=4
1+1+3=5
1+1+4=6
1+2+2=5
1+2+3=6
1+2+4=7
1+3+3=7
1+3+4=8
1+4+4=9
2+2+2=6
2+2+3=7
2+2+4=8
2+3+3=8
2+3+4=9
2+4+4=10
3+3+3=9
3+3+4=10
3+4+4=11
4+4+4=12
總共有 10 種不同的點數。
#### 範例輸入 4
```
3
10 20 30
```
#### 範例輸出 4
```
7
```
---
### Problem E. 舞蹈練習
Colten 平時非常喜歡看韓團,如果有機會的話你可能會收到他在 IG 傳給你的韓國女團跳舞短影片。
具有經驗的人描述,Colten 平時看的是「IVE」、「ILLIT」與「BABYMONSTER」三團,基本上已經看到他自己也非常會跳的程度,但有點可惜的是他自己並不能成為女團的一員。
Colten 某一天沒課想要來好好練舞,他挑了「REBEL HEART」、「Cherish」與「DRIP」來練習,已知這三首歌的難度分別為 $a,b,c$,現在可以任意的排定練舞的順序,如果第一首到第三首的難度依序是 $x,y,z$,那麼 Colten 會需要消耗 $(x + y) | (y - z) | (x \times z - y \times z)$ 的體力,其中 $|$ 是位元 OR 運算,請你設計一個程式幫 Colten 制定練舞的順序使他消耗的體力能越少越好。
如果有多種解,請優先練「REBEL HEART」,再者優先練 「Cherish」。
#### 輸入格式
```
a b c
```
#### 輸入限制
- $-1000 \le a,b,c \le 1000$
#### 輸出格式
```
song1
song2
song3
```
#### 範例說明
#### 範例 1
輸入:
```
1 2 3
```
輸出:
```
REBEL HEART
DRIP
Cherish
```
說明:
- 如果選擇順序 REBEL HEART, Cherish, DRIP:
$(1 + 2) | (2 - 3) | (1 \times 3 - 2 \times 3) = 3 | -1 | -3 = -1$
- 如果選擇順序 REBEL HEART, DRIP, Cherish:
$(1 + 3) | (3 - 2) | (1 \times 2 - 3 \times 2) = 4 | 1 | -4 = -3$
- 其他順序的消耗都未小於 -1
- 因此選擇消耗最小的順序 REBEL HEART, DRIP, Cherish
#### 範例 2
輸入:
```
100 200 300
```
輸出:
```
REBEL HEART
DRIP
Cherish
```
#### 範例 3
輸入:
```
5 6 7
```
輸出:
```
REBEL HEART
DRIP
Cherish
```
說明:
- 如果選擇順序 REBEL HEART, DRIP, Cherish:
$(5 + 7) | (7 - 6) | (5 \times 6 - 7 \times 6) = 12 | 1 | -12 = -3$
- 如果選擇順序 REBEL HEART, Cherish, DRIP:
$(5 + 6) | (6 - 7) | (5 \times 7 - 6 \times 7) = 11 | -1 | -7 = -1$
- 其他順序的消耗都大於 -3
- 因此選擇消耗最小的順序 REBEL HEART, DRIP, Cherish
#### 範例 4
輸入:
```
-1 0 1
```
輸出:
```
REBEL HEART
Cherish
DRIP
```
說明:
- 如果選擇順序 REBEL HEART, Cherish, DRIP:
$(-1 + 0) | (0 - 1) | (-1 \times 1 - 0 \times 1) = -1 | -1 | -1 = -1$
- 如果選擇順序 REBEL HEART, DRIP, Cherish:
$(-1 + 1) | (1 - 0) | (-1 \times 0 - 1 \times 0) = 0 | 1 | 0 = 1$
- 其他順序的消耗都未小於 -1
- 因此選擇消耗最小的順序 REBEL HEART, Cherish, DRIP
#### 範例 5
輸入:
```
1000 1000 1000
```
輸出:
```
REBEL HEART
Cherish
DRIP
```
說明:
- 因為所有數字都相同,任何順序的消耗都相同:
$(1000 + 1000) | (1000 - 1000) | (1000 \times 1000 - 1000 \times 1000) = 2000 | 0 | 0 = 2000$
- 根據題目要求,優先選擇 REBEL HEART,所以選擇順序 REBEL HEART, Cherish, DRIP
---
### Problem F. 簡單的問題
#### 題目描述
通常簡單的題目背後也有一些小巧思,這題就是如此。
輸入一組式子,請設計一個程式將該式子的結果計算出來。
備註:式子只會是兩個數字相加、相減或相乘。
#### 輸入格式
```
a+b or a-b or a*b
```
#### 輸入限制
保證這兩個數字都是正整數且不會超過 $1000$。
#### 輸出格式
```
ans
```
#### 範例輸入 1
```
10+20
```
#### 範例輸出 1
```
30
```
#### 範例輸入 2
```
10-20
```
#### 範例輸出 2
```
-10
```
#### 範例輸入 3
```
10*20
```
#### 範例輸出 3
```
200
```
---
### Problem G. 得分遊戲 (不計分)
:::warning
本題提供給已經全部寫完但想要再玩一下的同學
:::
現在有一個大小為 $3 \times m$ 的場地,左上角為 $(1,1)$ 右下角為 $(3, m)$。Colten 一開始位於 $(1,1)$ 的位置,已知每一個座標上都有一個數字 $a_{(x,y)}$,如果經過座標 $(x,y)$ 就可以得到該數字的分數。
已知遊戲規則是只能往右走或往下走且最終目標是要抵達 $(3,m)$。
請你設計一個程式計算在最佳策略下 Colten 可以獲得幾分
#### 輸入格式
```
m
a_(1,1) ... a_(1,3)
a_(2,1) ... a_(2,3)
a_(3,1) ... a_(3,3)
```
#### 輸入限制
- $1 \le m \le 5000$
- $1 \le a_{(x,y)} \le 10^9$
- $a_{(1,1)} = a_{(3,m)} = 0$
#### 輸出格式
```
ans
```
#### 範例輸入 1
```
4
0 1 1 1
1 1 1 1
1 1 1 0
```
#### 範例輸出 1
```
4
```
#### 範例輸入 2
```
4
0 10 7 1
7 90 1 1000
3 55 100 0
```
#### 範例輸出 2
```
1101
```
