## 歷屆試題題號整理
| 題號 | 名稱 | 日期 |
| - | - | - |
| [o076](https://zerojudge.tw/ShowProblem?problemid=o076) | 特技表演 | 113/06 |
| [o077](https://zerojudge.tw/ShowProblem?problemid=o077) | 電子畫布 | 113/06 |
| [o078](https://zerojudge.tw/ShowProblem?problemid=o078) | 缺字問題 | 113/06 |
| [o079](https://zerojudge.tw/ShowProblem?problemid=o079) | 最佳選擇 | 113/06 |
| [m931](https://zerojudge.tw/ShowProblem?problemid=m931) | 遊戲選角 | 113/01 |
| [m932](https://zerojudge.tw/ShowProblem?problemid=m932) | 蜜蜂觀察 | 113/01 |
| [m933](https://zerojudge.tw/ShowProblem?problemid=m933) | 邏輯電路 | 113/01 |
| [m934](https://zerojudge.tw/ShowProblem?problemid=m934) | 合併成本 | 113/01 |
| [m370](https://zerojudge.tw/ShowProblem?problemid=m370) | 機械鼠 | 112/10 |
| [m371](https://zerojudge.tw/ShowProblem?problemid=m371) | 卡牌遊戲 | 112/10 |
| [m372](https://zerojudge.tw/ShowProblem?problemid=m372) | 搬家 | 112/10 |
| [m373](https://zerojudge.tw/ShowProblem?problemid=m373) | 投資遊戲 | 112/10 |
| [k731](https://zerojudge.tw/ShowProblem?problemid=k731) | 路徑偵測 | 112/06 |
| [k732](https://zerojudge.tw/ShowProblem?problemid=k732) | 特殊位置 | 112/06 |
| [k733](https://zerojudge.tw/ShowProblem?problemid=k733) | 磁軌移動序列 | 112/06 |
| [k734](https://zerojudge.tw/ShowProblem?problemid=k734) | 開啟寶盒 | 112/06 |
| [j605](https://zerojudge.tw/ShowProblem?problemid=j605) | 程式考試 | 112/01 |
| [j606](https://zerojudge.tw/ShowProblem?problemid=j606) | 造字程式 | 112/01 |
| [j607](https://zerojudge.tw/ShowProblem?problemid=j607) | 先加後乘與函數 | 112/01 |
| [j608](https://zerojudge.tw/ShowProblem?problemid=j608) | 機器出租 | 112/01 |
| [i428](https://zerojudge.tw/ShowProblem?problemid=i428) | 巴士站牌 | 111/10 |
| [j123](https://zerojudge.tw/ShowProblem?problemid=j123) | 運貨站 | 111/10 |
| [j124](https://zerojudge.tw/ShowProblem?problemid=j124) | 石窟探險 | 111/10 |
| [j125](https://zerojudge.tw/ShowProblem?problemid=j125) | 蓋步道 | 111/10 |
| [i399](https://zerojudge.tw/ShowProblem?problemid=i399) | 數字遊戲 | 111/06 |
| [i400](https://zerojudge.tw/ShowProblem?problemid=i400) | 字串解碼 | 111/06 |
| [i401](https://zerojudge.tw/ShowProblem?problemid=i401) | 雷射測試 | 111/06 |
| [i402](https://zerojudge.tw/ShowProblem?problemid=i402) | 內積 | 111/06 |
| [h081](https://zerojudge.tw/ShowProblem?problemid=h081) | 程式交易 | 111/01 |
| [h082](https://zerojudge.tw/ShowProblem?problemid=h082) | 贏家預測 | 111/01 |
| [h083](https://zerojudge.tw/ShowProblem?problemid=h083) | 數位占卜 | 111/01 |
| [h084](https://zerojudge.tw/ShowProblem?problemid=h084) | 牆上海報 | 111/01 |
| [g595](https://zerojudge.tw/ShowProblem?problemid=g595) | 修補圍籬 | 110/11 |
| [g596](https://zerojudge.tw/ShowProblem?problemid=g596) | 動線安排 | 110/11 |
| [g597](https://zerojudge.tw/ShowProblem?problemid=g597) | 生產線 | 110/11 |
| [g598](https://zerojudge.tw/ShowProblem?problemid=g598) | 真假子圖 | 110/11 |
| [g275](https://zerojudge.tw/ShowProblem?problemid=g275) | 七言對聯 | 110/09 |
| [g276](https://zerojudge.tw/ShowProblem?problemid=g276) | 魔王迷宮 | 110/09 |
| [g277](https://zerojudge.tw/ShowProblem?problemid=g277) | 幸運數字 | 110/09 |
| [g278](https://zerojudge.tw/ShowProblem?problemid=g278) | 美食博覽會 | 110/09 |
| [f605](https://zerojudge.tw/ShowProblem?problemid=f605) | 購買力 | 110/01 |
| [f606](https://zerojudge.tw/ShowProblem?problemid=f606) | 流量 | 110/01 |
| [f607](https://zerojudge.tw/ShowProblem?problemid=f607) | 切割費用 | 110/01 |
| [f608](https://zerojudge.tw/ShowProblem?problemid=f608) | 飛黃騰達 | 110/01 |
| [f312](https://zerojudge.tw/ShowProblem?problemid=f312) | 人力分配 | 109/10 |
| [f313](https://zerojudge.tw/ShowProblem?problemid=f313) | 人口遷移 | 109/10 |
| [f314](https://zerojudge.tw/ShowProblem?problemid=f314) | 勇者修練 | 109/10 |
| [f315](https://zerojudge.tw/ShowProblem?problemid=f315) | 低地距離 | 109/10 |
| [f579](https://zerojudge.tw/ShowProblem?problemid=f579) | 購物車 | 109/07 |
| [f580](https://zerojudge.tw/ShowProblem?problemid=f580) | 骰子 | 109/07 |
| [f581](https://zerojudge.tw/ShowProblem?problemid=f581) | 圓環出口 | 109/07 |
| [f582](https://zerojudge.tw/ShowProblem?problemid=f582) | 病毒演化 | 109/07 |
| [h026](https://zerojudge.tw/ShowProblem?problemid=h026) | 猜拳模擬 | 109/01 |
| [h027](https://zerojudge.tw/ShowProblem?problemid=h027) | 矩陣總和 | 109/01 |
| [h028](https://zerojudge.tw/ShowProblem?problemid=h028) | 砍樹 | 109/01 |
| [h029](https://zerojudge.tw/ShowProblem?problemid=h029) | 自動分裝 | 109/01 |
| [b964](https://zerojudge.tw/ShowProblem?problemid=b964) | 成績指標 | 105/03 |
| [b965](https://zerojudge.tw/ShowProblem?problemid=b965) | 矩陣轉換 | 105/03 |
| [b966](https://zerojudge.tw/ShowProblem?problemid=b966) | 線段覆蓋長度 | 105/03 |
| [b967](https://zerojudge.tw/ShowProblem?problemid=b967) | 血緣關係 | 105/03 |
| [c294](https://zerojudge.tw/ShowProblem?problemid=c294) | 三角形辨識 | 105/10 |
| [c295](https://zerojudge.tw/ShowProblem?problemid=c295) | 最大和 | 105/10 |
| [c296](https://zerojudge.tw/ShowProblem?problemid=c296) | 定時K彈 | 105/10 |
| [c297](https://zerojudge.tw/ShowProblem?problemid=c297) | 棒球遊戲 | 105/10 |
| [c290](https://zerojudge.tw/ShowProblem?problemid=c290) | 秘密差 | 106/03 |
| [c291](https://zerojudge.tw/ShowProblem?problemid=c291) | 小群體 | 106/03 |
| [c292](https://zerojudge.tw/ShowProblem?problemid=c292) | 數字龍捲風 | 106/03 |
| [c575](https://zerojudge.tw/ShowProblem?problemid=c575) | 基地台 | 106/03 |
| [c461](https://zerojudge.tw/ShowProblem?problemid=c461) | 邏輯運算子 | 106/10 |
| [c462](https://zerojudge.tw/ShowProblem?problemid=c462) | 交錯字串 | 106/10 |
| [c463](https://zerojudge.tw/ShowProblem?problemid=c463) | 樹狀圖分析 | 106/10 |
| [c471](https://zerojudge.tw/ShowProblem?problemid=c471) | 物品堆疊 | 106/10 |
| [e286](https://zerojudge.tw/ShowProblem?problemid=e286) | 籃球比賽 | 108/06 |
| [e287](https://zerojudge.tw/ShowProblem?problemid=e287) | 機器人的路徑 | 108/06 |
| [e288](https://zerojudge.tw/ShowProblem?problemid=e288) | 互補CP | 108/06 |
| [e289](https://zerojudge.tw/ShowProblem?problemid=e289) | 美麗的彩帶 | 108/06 |
## a001
```python
print('hello, ' + input())
```
## a002
```python
a = input().split()
print(int(a[0]) + int(a[1]))
```
## a003
```python
m, d = map(int, input().split())
s = (m * 2 + d ) % 3
print(['普通', '吉', '大吉'][s])
```
## a004
```python
while True:
try:
y = int(input())
if (( y % 4 == 0) and ( y %100 != 0)) or (y % 400 == 0):
print('閏年')
else:
print('平年')
except:
break
```
## a005
提示:如何輕鬆取出前 4 個數字並轉化成整數
```python!
a, b, c, d = map(int,input().split())
```
解答:
```python!
n = int(input())
for i in range(n):
a, b, c, d = map(int,input().split())
if b - a == c - b:
print(a, b, c, d, int(d + b - a))
else:
print(a, b, c, d, int(d * (b / a)))
```
## a009
提示:如何在字元與編碼之間相互轉換
```python!
ord('A') #將字元轉化成編碼 'A' -> 65
chr(65) #將編碼轉化成字元 65 -> 'A'
```
```python!
code = input()
text = ''
for c in code:
text += chr(ord(c) - 7)
print(text)
```
## c636
提示:注意使用者可能輸入負數的民國年
```python!
import sys
a = '鼠牛虎兔龍蛇馬羊猴雞狗豬'
b = a[::-1]
for c in sys.stdin:
i = int(c)
if i > 0: print(a[(i - 1) % 12])
if i < 0: print(b[(abs(i) - 1) % 12])
```
## a020
提示:使用 table 字典去儲存字母與數字的對照表
```python
table = {
'A':10,'B':11,'C':12,'D':13,'E':14,'F':15,'G':16,'H':17,'I':34,
'J':18,'K':19,'L':20,'M':21,'N':22,'O':35,'P':23,'Q':24,'R':25,
'S':26,'T':27,'U':28,'V':29,'W':32,'X':30,'Y':31,'Z':33
}
id = input() #取得身分證字號
t = table[id[0]]
a = t // 10
b = t % 10
answer = a + b * 9
answer += int(id[1])*8 + int(id[2])*7 + int(id[3])*6 + int(id[4])*5
answer += int(id[5])*4 + int(id[6])*3 + int(id[7])*2 + int(id[8])*1 + int(id[9])*1
if answer % 10 == 0: print('real')
else: print('fake')
```
## a024
提示:使用 while 迴圈進行輾轉相除法,當其中一個數值被另一個整除時,最小公因數就出來了
```python!
[a, b] = input().split()
a = int(a)
b = int(b)
while a != 0 and b != 0:
a = a % b
a, b = b, a
print(a)
```
## d097
```python!
import sys
for line in sys.stdin:
try:
arr = list(map(int, line.split()))
a = []
b = [i for i in range(1, arr[0])]
for i in range(1, len(arr) - 1):
diff = abs(arr[i] - arr[i + 1])
a.append(diff)
a.sort()
if a == b:
print('Jolly')
else:
print('Not jolly')
except:
break
```
## a524
```python!
import sys
def test(arr, s):
if arr == '': print(s)
for c in arr:
test(arr.replace(c, ''), s + c)
for line in sys.stdin:
try:
x = int(line)
arr = [str(i) for i in range(x, 0, -1)]
test(''.join(arr))
except:
break
```
## a054
```python
code = {'A':10, 'B':11, 'C':12, 'D':13, 'E':14, 'F':15, 'G':16, 'H':17, 'I':34,
'J':18, 'K':19, 'L':20, 'M':21, 'N':22, 'O':35, 'P':23, 'Q':24, 'R':25,
'S':26, 'T':27, 'U':28, 'V':29, 'W':32, 'X':30, 'Y':31, 'Z':33}
for k in code:
code[k] = (code[k] // 10) + (code[k] % 10) * 9
x = [int(i) for i in input()]
s = x[0] * 8 + x[1] * 7 + x[2] * 6 + x[3] * 5 + x[4] * 4 + x[5] * 3 + x[6] * 2 + x[7] * 1
for c in code:
if 10 - (code[c] + s) % 10 == x[8]:
print(c, end='')
```
## a065
```python
a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
code = {}
for i in range(26): code[a[i]] = i
p = [code[c] for c in input()]
#步驟:計算出之間的數值差並印出
```
## c657
## d478
## a417
提示:
```python
n = int(input())
for i in range(n):
N, D = map(int, input().split())
grid = [[0 for i in range(N)] for i in range(N)]
if N % 2 == 1: grid[N // 2][N // 2] = N*N
count = 1
for n in range(N // 2):
x = n
y = n
for i in range(4):
for j in range(N - n * 2 - 1):
grid[y][x] = count
if i == 0: x += 1
elif i == 1: y += 1
elif i == 2: x -= 1
elif i == 3: y -= 1
count += 1
for y in range(N):
for x in range(N):
if D == 1:
print(str(grid[y][x]).rjust(5), end='')
else:
print(str(grid[x][y]).rjust(5), end='')
print()
```
# a468
```python!
import re
from math import ceil, floor
table = {
"January": 1, "February": 2, "March": 3, "April": 4, "May": 5, "June": 6,
"July": 7, "August": 8, "September": 9, "October": 10, "November": 11, "December": 12
}
n = int(input())
for x in range(n):
m1, d1, y1 = input().split()
m2, d2, y2 = input().split()
y1 = int(y1)
y2 = int(y2)
d1 = int(d1[:-1])
d2 = int(d2[:-1])
m1 = table[m1]
m2 = table[m2]
if m1 > 2: y1 += 1
if m2 == 1 or (m2 == 2 and d2 < 29): y2 -= 1
count = 0
s = ceil(y1 / 4) * 4
e = floor(y2 / 4) * 4
if e >= s: count += (e - s) / 4 + 1
s = ceil(y1 / 100) * 100
e = floor(y2 / 100) * 100
if e >= s: count -= (e - s) / 100 + 1
s = ceil(y1 / 400) * 400
e = floor(y2 / 400) * 400
if e >= s: count += (e - s) / 400 + 1
print(f'Case {x + 1}: {int(count)}')
```
# o076
```python!
m = int(input())
arr = list(map(int, input().split()))
count = 0
best = 0
for i in range(1, m):
if arr[i - 1] > arr[i]:
count += 1
best = max(best, count)
else:
count = 0
print(best + 1)
```
# o077
```python!
h, w, n = map(int, input().split())
grid = [[0 for x in range(w)] for y in range(h)]
for i in range(n):
r, c, t, x = map(int, input().split())
for yy in range(max(r - t, 0), min(r + t + 1, h)):
for xx in range(max(c - t, 0), min(c + t + 1, w)):
if abs(xx - c) + abs(yy - r) <= t:
grid[yy][xx] += x
for row in grid:
print(*row)
```
# o078
```python!
import itertools
a = input()
n = int(input())
s = input()
arr = [s[i:i+n] for i in range(len(s) - n + 1)]
arr = set(arr)
arr = sorted(arr)
idx = 0
for ss in itertools.product(a, repeat=n):
x = ''.join(ss)
if idx < len(arr) and x == arr[idx]:
idx += 1
else:
print(x)
break
```
# o079
```python
from bisect import bisect_left
n, k = map(int, input().split())
v = list(map(int, input().split()))
mp = { 0: [(0, 0)] }
total = 0
diff = 0
for i in range(1, n + 1):
total += v[i - 1]
diff += -1 if v[i - 1] % 2 else 1
if total > k: continue
if diff not in mp:
mp[diff] = []
mp[diff].append((i, total))
if 0 in mp:
ans = mp[0][-1][1]
else:
ans = 0
total = 0
diff = 0
for i in range(n - 1, -1, -1):
total += v[i]
diff += -1 if v[i] % 2 else 1
if -diff not in mp: continue
endpts = mp[-diff]
l = 0
r = bisect_left(endpts, (i + 1, -1))
while l < r:
mid = (l + r) // 2
if endpts[mid][1] + total > k:
r = mid
else:
l = mid + 1
if l > 0:
ans = max(ans, endpts[l - 1][1] + total)
print(ans)
```
```python
grid = [
[8, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 3, 6, 0, 0, 0, 0, 0],
[0, 7, 0, 0, 9, 0, 2, 0, 0],
[0, 5, 0, 0, 0, 7, 0, 0, 0],
[0, 0, 0, 0, 4, 5, 7, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 3, 0],
[0, 0, 1, 0, 0, 0, 0, 6, 8],
[0, 0, 8, 5, 0, 0, 0, 1, 0],
[0, 9, 0, 0, 0, 0, 4, 0, 0],
]
def get_valid(x, y):
if grid[y][x] != 0: return []
possible_numbers = set(range(1, 10))
for num in grid[y]:
possible_numbers.discard(num)
for row in grid:
possible_numbers.discard(row[x])
start_row = (y // 3) * 3
start_col = (x // 3) * 3
for i in range(3):
for j in range(3):
possible_numbers.discard(grid[start_row + i][start_col + j])
return list(possible_numbers)
# 遞迴填入答案
def solve():
pass
solve()
for row in grid: print(row)
```
# m370
```python
a, b = map(int, input().split())
arr = list(map(int, input().split()))
r_idx = a
r_count = 0
l_idx = a
l_count = 0
for x in arr:
if x > a:
r_count += 1
if x > r_idx: r_idx = x
else:
l_count += 1
if x < l_idx: l_idx = x
if r_count > l_count:
print(r_count, r_idx)
else:
print(l_count, l_idx)
```
# m371
```python
Y, X = map(int, input().split())
grid = []
for _ in range(Y):
row = list(map(int, input().split()))
grid.append(row)
total = 0
while True:
diff = False #是否異動
# 檢查水平線
for y in range(Y):
a = 0
b = 1
while b < X:
if grid[y][a] == grid[y][b] and grid[y][a] != '*':
total += grid[y][a]
grid[y][a] = '*'
grid[y][b] = '*'
a = b + 1
b = a + 1
diff = True
elif grid[y][b] == '*':
b += 1
else:
a = b
b += 1
# 檢查垂直線
...(自行完成)
if not diff: break
print(total)
```
# m372
```python!
H, W = map(int, input().split())
grid = []
grid.append(['0' for i in range(W + 2)])
for i in range(H):
grid.append(['0'] + [s for s in input()] + ['0'])
grid.append(['0' for i in range(W + 2)])
def search(y, x):
arr = [(y, x)]
count = 0
while len(arr) > 0:
y, x = arr.pop()
if grid[y][x] == '0': continue
tmp = grid[y][x]
grid[y][x] = '0'
count += 1
if tmp in "XLHF" and grid[y][x + 1] in "XH7J": arr.append((y, x + 1))
if tmp in "XH7J" and grid[y][x - 1] in "XLHF": arr.append((y, x - 1))
if tmp in "XIF7" and grid[y + 1][x] in "XILJ": arr.append((y + 1, x))
if tmp in "XILJ" and grid[y - 1][x] in "XIF7": arr.append((y - 1, x))
return count
ans = 0
for y in range(H):
for x in range(W):
if grid[y][x] != '0':
ans = max(ans, search(y, x))
print(ans)
```
# m932
```python
```