# IMD2022 # pA. 非嚴格遞增子集合 ```python= while True: try: ans = 0 a = [int(i) for i in list(input())] temp = 0 for i in range(len(a)): for j in range(i+1, len(a)): if a[j-1] > a[j]: j -= 1 break ans = max(ans, j-i+1) print(ans) except EOFError: break ``` # pB. 移除重複 ```python= while True: try: a = input()[::-1] seen = set() ans = "" for i in a: if i not in seen: seen.add(i) ans += i print(ans[::-1]) except EOFError: break ``` # pC. 捲積 ```python= arr = [int(i) for i in input().split(",")] r, c, arr = arr[0], arr[1], arr[2::] t = [] for i in range(0, len(arr), c): t.append(arr[i:i+c]) dp = [[0]*(c-2) for _ in range(r-2)] om = [[1, -1, 1], [-1, 1, -1], [1, -1, 1]] for i in range(r-2): for j in range(c-2): temp = 0 for x in range(3): for y in range(3): temp += om[x][y]*t[i+x][j+y] dp[i][j] = temp print(max([max(i) for i in dp])) ``` # pD. 切割問題 ```python= # dp[i] = 第i個最大收益 price = [0, 1, 5, 8, 9, 10, 12, 17, 20, 24, 25] dp = [0]*(11) for i in range(1, 11): dp[i] = max([price[i], *[dp[i-j]+dp[j] for j in range(i-1)]]) n = int(input()) print(dp[n]) ``` # pE. 計算 ```python= def count(n, k): if n == 0: return 0 if k == 0: return 1 if dp[n][k] != -1: return dp[n][k] val = 0 for i in range(n): if k-i < 0: break val += count(n-1, k-i) dp[n][k] = val return dp[n][k] for _ in range(int(input())): n, k = map(int, input().split()) dp = [[-1]*(k+1) for _ in range(n+1)] print(count(n, k)) ``` # pF. 關節點 ```python= from collections import defaultdict def bfs(root): q = [1 if root != 1 else 2] head = 0 seen = set() seen.add(1 if root != 1 else 2) while head < len(q): node = q[head]; head += 1 for j in d[node]: if j not in seen and j != root: seen.add(j) q.append(j) if len(seen) == n-1: return False return True n = int(input()) while n: a = [int(i) for i in input().split()] d = defaultdict(set) while a[0]: for i in a[1::]: d[a[0]].add(i) d[i].add(a[0]) a = [int(i) for i in input().split()] ans = 0 for i in range(1, n+1): if bfs(i): ans += 1 print(ans) n = int(input()) ``` # pG. 運算子 ```python= for _ in range(int(input())): a, b = map(int, input().split()) if a > b: print(">") elif a < b: print("<") else: print("=") ``` # pH. 西洋棋 ```python= for _ in range(int(input())): x1, y1, x2, y2 = map(int, input().split()) x, y = abs(x2-x1), abs(y2-y1) if x == y == 0: print(0) elif x == y or x == 0 or y == 0: print(1) else: print(2) ``` # pI. 省錢大作戰 ```python= for _ in range(int(input())): input() p = sorted([int(i) for i in input().split()], reverse=True) ans = 0 if len(p) >= 3: for i in range(2, len(p), 3): ans += p[i] print(ans) else: print(0) ``` # pJ. 時間計算 ```python= import datetime now = datetime.datetime(1970,1,1) for _ in range(int(input())): n = int(input()) ans = now+datetime.timedelta(days=n) print(ans.strftime("%Y-%m-%d")) ```