# 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) ```