# 110_01
# pA. 三數有權重的相加
```python=
a, b, c, d = map(int, input().split())
print(56*a+24*b+14*c+6*d)
```
# pB1. 閏年(1 行版)
```python=
y = int(input())
if y%4 == 0 and y%100 != 0 or y%400 == 0:
print("a leap year")
else:
print("a normal year")
```
# pB2. 閏年 (多行版)
```python=
for _ in range(int(input())):
y = int(input())
if y%4 == 0 and y%100 != 0 or y%400 == 0:
print("a leap year")
else:
print("a normal year")
```
# pB3. 閏年 (Case 多行版)
```python=
for _ in range(1, int(input())+1):
y = int(input())
if y%4 == 0 and y%100 != 0 or y%400 == 0:
print(f"Case {_}: a leap year")
else:
print(f"Case {_}: a normal year")
```
# pB4. 閏年 (0 尾版)
```python=
y = int(input())
while y:
if y%4 == 0 and y%100 != 0 or y%400 == 0:
print("a leap year")
else:
print("a normal year")
y = int(input())
```
# pB5. 閏年 (EOF版)
```python=
while True:
try:
y = int(input())
if y%4 == 0 and y%100 != 0 or y%400 == 0:
print("a leap year")
else:
print("a normal year")
except EOFError:
break
```
# pC. 票選動物
```python=
a = [0, 0]
for _ in range(9):
n = input()
if n == "Tiger":
a[0] += 1
else:
a[1] += 1
if a[0] > a[1]:
print("Tiger")
else:
print("Lion")
```
# pD. 化學廢料
```python=
input()
print(len(set([int(i) for i in input().split()])))
```
# pE. 所有位數和
```python=
while True:
try:
n = input()
ans = 0
for i in n:
ans += int(i)
print(ans)
except EOFError:
break
```
# pF. 漢明距離
```python=
for _ in range(int(input())):
a = input()
b = input()
ans = 0
for i in range(len(a)):
if a[i] != b[i]:
ans += 1
print(ans)
```
# pG. 格雷碼
```python=
def f(n, arr):
if n-1 == 0: return arr
arr = ["0"+i for i in arr]+["1"+j for j in arr[::-1]]
return f(n-1, arr)
n = int(input())
arr = ["0", "1"]
arr = f(n, arr)
for i in arr:
print(i)
```
# pH1. 網段網路位址和網段廣播位址
```python=
for _ in range(int(input())):
a, b = input().split("/")
a = a.split(".")
b = b.split(".")
ip = [0]*(len(a))
for i in range(len(a)):
ip[i] = int(a[i]) & int(b[i])
for i in range(len(a)):
a[i] = int(a[i]) | (~int(b[i])+256)
print(".".join(map(str, ip)),end="/")
print(".".join(map(str, a)))
```
# pH2. 網段網路位址和網段廣播位址
```python=
for _ in range(int(input())):
a, b = input().split("/")
a = a.split(".")
b = "1"*(int(b))+"0"*(32-int(b))
son = [0]*(4)
temp = 0
for i in range(4):
son[i] = int(b[i+temp:i+temp+8],2)
temp += 7
ip = [0]*(len(a))
for i in range(len(a)):
ip[i] = int(a[i]) & int(son[i])
for i in range(len(a)):
a[i] = int(a[i]) | (~int(son[i])+256)
print(".".join(map(str, ip)),end="/")
print(".".join(map(str, a)))
```
# pI. 矩陣乘法
```python=
while True:
try:
a, b, c, d = map(int, input().split())
A = []
for i in range(a):
A.append([int(i) for i in input().split()])
B = []
for i in range(c):
B.append([int(i) for i in input().split()])
C = [[0]*(d) for _ in range(a)]
for i in range(a):
for j in range(d):
temp = 0
for k in range(b):
temp += A[i][k]*B[k][j]
C[i][j] = temp
for i in C:
print(" ".join(map(str, i)))
except EOFError:
break
```
# pJ. 約瑟夫斯問題
數學解,可以看[這個](https://zh.wikipedia.org/zh-tw/%E7%BA%A6%E7%91%9F%E5%A4%AB%E6%96%AF%E9%97%AE%E9%A2%98#%E6%95%B0%E5%AD%A6%E6%8E%A8%E5%AF%BC%E8%A7%A3%E6%B3%95)
```python=
while True:
try:
n, k = map(int, input().split())
s = 0
for i in range(2, n+1):
s = (s+k)%i
print(s+1)
except EOFError:
break
```
# pK. 最長共同⼦序列LCS(Longest common subsequence)
```python=
for _ in range(int(input())):
a = input()
b = input()
dp = [[0]*(len(b)+1) for _ in range(len(a)+1)]
for i in range(1, len(a)+1):
for j in range(1, len(b)+1):
if a[i-1] == b[j-1]:
dp[i][j] = dp[i-1][j-1]+1
else:
dp[i][j] = max(dp[i-1][j], dp[i][j-1])
print(dp[-1][-1])
```
# pL1. ⼆元樹的前序拜訪
```python=
class Node:
def __init__(self, n):
self.n = n
self.left = None
self.right = None
def add(self, data):
if self.n > data:
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):
ans.append(self.n)
if self.left:
self.left.vis()
if self.right:
self.right.vis()
for _ in range(int(input())):
input()
arr = [int(i) for i in input().split(",")]
root = Node(arr[0])
for i in arr[1::]:
root.add(i)
ans = []
root.vis()
print(*map(str, ans))
```
# pL2. ⼆元樹的後序拜訪
```python=
class Node:
def __init__(self, n):
self.n = n
self.left = None
self.right = None
def add(self, data):
if self.n > data:
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(",")]
root = Node(arr[0])
for i in arr[1::]:
root.add(i)
ans = []
root.vis()
print(*map(str, ans))
```