# 113_01
# pA. 二數有權重相加–(單列)
```python=
a, b = map(int, input().split())
print(4*a+6*b)
```
# pB. 陣列中重複的部分拿掉
```python=
print(len(set([int(i) for i in input().split()])))
```
# pC. 回文
```python=
a = input()
print(True if a == a[::-1] else False)
```
# pD. 寶石
```python=
s, j = input().split()
ans = 0
for i in s:
ans += j.count(i)
print(ans)
```
# pE. 最大的奇數值
```python=
s = input()
head = -1
for i in range(len(s)):
if int(s[i])%2:
head = i
print(s[0:head+1] if s[0:head+1] else 0)
```
# pF. 因式分解
```python=
from collections import defaultdict
n = int(input())
d = defaultdict(int)
while n != 1:
for i in range(2, int(n**0.5)+1):
if not(n%i):
d[i] += 1
n //= i
break
else:
d[n] += 1
break
ans = []
for i in d:
if d[i] > 1:
ans.append(f"{i}^{d[i]}")
else:
ans.append(f"{i}")
print(" * ".join(ans))
```
# pG. 巴士站牌
```python=
n = int(input())
x, y = map(int, input().split())
M, m = 0, float("inf")
for i in range(n-1):
tx, ty = map(int, input().split())
temp = abs(tx-x)+abs(ty-y)
M, m = max(M, temp), min(m, temp)
x, y = tx, ty
print(M, m)
```
# pH. 星座
```python=
key = ["Aquarius", "Pisces", "Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius","Capricorn"]
for _ in range(int(input())):
m, d = map(int, input().split("/"))
if m == 1 and 21 <= d or m == 2 and d <= 19:
print(key[0])
elif m == 2 and 20 <= d or m == 3 and d <= 20:
print(key[1])
elif m == 3 and 21 <= d or m == 4 and d <= 20:
print(key[2])
elif m == 4 and 21 <= d or m == 5 and d <= 21:
print(key[3])
elif m == 5 and 22 <= d or m == 6 and d <= 21:
print(key[4])
elif m == 6 and 22 <= d or m == 7 and d <= 22:
print(key[5])
elif m == 7 and 23 <= d or m == 8 and d <= 21:
print(key[6])
elif m == 8 and 22 <= d or m == 9 and d <= 23:
print(key[7])
elif m == 9 and 24 <= d or m == 10 and d <= 23:
print(key[8])
elif m == 10 and 24 <= d or m == 11 and d <= 22:
print(key[9])
elif m == 11 and 23 <= d or m == 12 and d <= 22:
print(key[10])
else:
print(key[11])
```
# pI. 人力分配
```python=
a1, b1, c1 = map(int, input().split())
a2, b2, c2 = map(int, input().split())
n = int(input())
M = -float("inf")
for i in range(n+1):
M = max(M, a1*i**2+b1*i+c1+a2*(n-i)**2+b2*(n-i)+c2)
print(M)
```
# pJ. 快樂的間距
```python=
while True:
try:
arr = [int(i) for i in input().split()][1::]
d = [0]*(len(arr)-1)
seen = set()
for i in range(len(arr)-1):
seen.add(abs(arr[i]-arr[i+1]))
ans = {*[i for i in range(1, len(arr))]}
if seen != ans:
print("Not jolly")
else:
print("Jolly")
except EOFError:
break
```
# pK. 十進制轉換成任意進制
```python=
key = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"]
for i in range(int(input())):
n, d = map(int, input().split())
s = ""
while n:
s, n = s+key[n%d], n//d
print(s[::-1] if s[::-1] != "" else 0)
```
# pL. 買低賣高
```python=
n = int(input())
num = [0]+[int(i) for i in input().split()]
for i in range(1, n+1):
num[i] += num[i-1]
d, p = 0, 0
ans = 0
for i in range(1, n+1):
d = min(d, num[i])
ans = max(ans, num[i]-d)
print(ans)
```
# pM. 費波那契數列
快速冪解
```python=
A = [[1, 1], [1, 0]]
mod = 10**9+7
def mult(A, B):
c = [[0]*(2) for _ in range(2)]
c[0][0] = (A[0][0]*B[0][0] + A[0][1]*B[1][0])%mod
c[0][1] = (A[0][0]*B[0][1] + A[0][1]*B[1][1])%mod
c[1][0] = (A[1][0]*B[0][0] + A[1][1]*B[1][0])%mod
c[1][1] = (A[1][0]*B[0][1] + A[1][1]*B[1][1])%mod
return c
def sol(n):
if n == 1: return A
if n%2:
Ak = sol((n-1)//2)
return mult(mult(A, Ak), Ak)
Ak = sol(n//2)
return mult(Ak, Ak)
n = int(input())
ans = sol(n-1)
print(ans[0][0])
```
# pN. 骰子組合
```python=
n = int(input())
mod = 10**9+7
dp = [1, 2, 4, 8 ,16, 32]
s = 63
for i in range(6, n+1):
dp[i%6], s = s, (s-dp[i%6]+s)%mod
if n < 6:
print(dp[n-1])
else:
print(dp[(i-1)%6])
```
# pO. 硬幣
```python=
n, target = map(int, input().split())
dp = [float("inf")]*(target+1)
dp[0] = 0
coins = [int(i) for i in input().split()]
for coin in coins:
for i in range(coin, target+1):
if i-coin >= 0:
dp[i] = min(dp[i], dp[i-coin]+1)
print(dp[target] if dp[target] != float("inf") else -1)
```
# pP. 最長遞增子序列
LIS 應用
```python=
n = int(input())
s = [int(i) for i in input().split()]
lis = [1]*(n)
for i in range(1, n):
for j in range(0, i):
if s[j] < s[i]:
lis[i] = max(lis[i], lis[j]+1)
print(max(lis))
```
# pQ. 樹的直徑
```python=
from collections import defaultdict, deque
d = defaultdict(list)
n = int(input())
for _ in range(n-1):
a, b = map(int, input().split())
d[a].append(b)
d[b].append(a)
q = deque([1])
depth = [0]*(n+1)
seen = set()
seen.add(1)
while len(q):
node = q.popleft()
for i in d[node]:
if i not in seen:
seen.add(i)
q.append(i)
depth[i] = depth[node]+1
root = depth.index(max(depth))
q = deque([root])
depth = [0]*(n+1)
seen = set()
seen.add(root)
while len(q):
node = q.popleft()
for i in d[node]:
if i not in seen:
seen.add(i)
q.append(i)
depth[i] = depth[node]+1
print(max(depth))
```
# pR. 樹匹配
```python=
from collections import defaultdict, deque
n = int(input())
d = defaultdict(list)
m = [0]*(n+1)
ans = 0
for _ in range(n-1):
a, b = map(int, input().split())
d[a].append(b)
d[b].append(a)
def dfs(x, pre):
global ans
for i in d[x]:
if i == pre:
continue
dfs(i, x)
if not m[i] and not m[x]:
m[i] = m[x] = 1
ans += 1
dfs(1, 0)
print(ans)
```