# 104正式試題
## pA. 電梯電費計算問題
```python=
for _ in range(int(input())):
input()
num = [int(i) for i in input().split(",")]
now = num[0]
ans = 0
for i in num[1::]:
if now < i:
ans += (i-now)*20
else:
ans += (now-i)*10
now = i
print(ans)
```
## pB. 樂透
```python=
n = int(input())
right = [int(i) for i in input().split(",")]
for _ in range(n):
ans = [0, 0, 0, 0, 0, 0]
num = [int(i) for i in input().split(",")]
for j in range(6):
e = 0
if j == 0:
temp = num[1::]
elif j == 5:
temp = num[0:5]
else:
temp = num[0:j]+num[j+1::]
for i in right:
if i in temp:
e += 1
ans[e] += 1
print(",".join(map(str, ans[2::])))
```
## pC. 組合問題
```python=
def DFS(i, s):
if len(s) == len(i):
seen.add(s)
return 0
for j in i:
if j not in s:
DFS(i, s+j)
for _ in range(int(input())):
i, j, k = input().split(",")
seen = set()
DFS(i, "")
seen = sorted(list(seen))
print(int(seen[int(j)-1])+int(seen[int(k)-1]))
```
## pD. 最大公因數計算
```python=
def gcd(a, b):
while b:
a, b = b, a%b
return a
for _ in range(int(input())):
num = [int(i) for i in input().split(",")]
ans = num[0]
for i in num[1::]:
ans = gcd(ans, i)
print(ans)
```
## pE. 計算位元為 1 的個數
```python=
for _ in range(int(input())):
print(bin(int(input())).count("1"))
```
## pF. 矩陣的乘法
```python=
for _ in range(int(input())):
m, r, r, n = map(int, input().split(","))
A = []
for _ in range(m):
temp = [int(i) for i in input().split()]
if 9999 in temp:
find = 0
A.append(temp)
B = []
for _ in range(r):
temp = [int(i) for i in input().split()]
if 9999 in temp:
find = 1
B.append(temp)
AB = []
for _ in range(m):
temp = [int(i) for i in input().split()]
if 9999 in temp:
find = 2
AB.append(temp)
flag = False
for i in range(m):
for c in range(n):
temp = 0
for j in range(r):
temp += A[i][j] * B[j][c]
if AB[i][c] != temp:
if find == 2:
print(temp)
flag = True
break
else:
for j in range(r):
if A[i][j] == 9999:
a = B[j][c]
elif B[j][c] == 9999:
a = A[i][j]
temp -= 9999*a
print((AB[i][c]-temp)//a)
flag = True
break
if flag:
break
```
## pG. 輸出二元樹的後序拜訪的結果
class 寫法
```python=
class node:
def __init__(self, n):
self.n = n
self.left = None
self.right = None
def add(self, data):
if data < self.n:
if self.left:
self.left.add(data)
else:
self.left = node(data)
else:
if self.right:
self.right.add(data)
else:
self.right = node(data)
def vis(self):
if self.left:
self.left.vis()
if self.right:
self.right.vis()
ans.append(self.n)
for _ in range(int(input())):
input()
arr = [int(i) for i in input().split(",")]
N = node(arr[0])
for i in arr[1::]:
N.add(i)
ans = []
N.vis()
print(",".join(map(str, ans)))
```
## pH. 最小成本生成樹
chatgpt
```python=
def find(parent, node):
if parent[node] != node:
parent[node] = find(parent, parent[node])
return parent[node]
def union(parent, rank, u, v):
root_u = find(parent, u)
root_v = find(parent, v)
if root_u != root_v:
if rank[root_u] > rank[root_v]:
parent[root_v] = root_u
elif rank[root_u] < rank[root_v]:
parent[root_u] = root_v
else:
parent[root_v] = root_u
rank[root_u] += 1
def kruskal(graph):
edges = sorted(graph['edges'], key=lambda e: e[2])
parent = {}
rank = {}
for node in graph['nodes']:
parent[node] = node
rank[node] = 0
mst = []
for u, v, weight in edges:
if find(parent, u) != find(parent, v):
union(parent, rank, u, v)
mst.append((u, v, weight))
return mst
# 範例使用
for _ in range(int(input())):
arr = [([i[0], i[2], int(i[4::])]) for i in input().split()]
nodes = set()
for i in range(len(arr)):
nodes.add(arr[i][0])
nodes.add(arr[i][1])
graph = {
'nodes': list(nodes),
'edges': arr
}
ans = 0
mst = kruskal(graph)
for u, v, weight in mst:
ans += weight
print(ans)
```