# 107正式試題 ## pA. 計算字數及含有 s 或 S 字母的字數 ```python= for _ in range(int(input())): n = input().split() s = sum([1 for i in n if "S" in i or "s" in i]) print(str(len(n))+","+str(s)) ``` ## pB. 井字棋 ```python= for _ in range(int(input())): arr = [] for i in range(3): arr.append(list(input())) if arr[0].count(arr[0][0]) == 3 and arr[0][0] != '0': print(arr[0][0]) elif arr[1].count(arr[1][0]) == 3 and arr[1][0] != '0': print(arr[1][0]) elif arr[2].count(arr[2][0]) == 3 and arr[2][0] != '0': print(arr[2][0]) elif arr[0][0] == arr[1][0] == arr[2][0] and arr[0][0] != '0': print(arr[0][0]) elif arr[0][1] == arr[1][1] == arr[2][1] and arr[0][1] != '0': print(arr[0][1]) elif arr[0][2] == arr[1][2] == arr[2][2] and arr[0][2] != '0': print(arr[0][2]) elif arr[0][0] == arr[1][1] == arr[2][2] and arr[0][0] != '0': print(arr[0][0]) elif arr[0][2] == arr[1][1] == arr[2][0] and arr[0][2] != '0': print(arr[0][2]) else: print("3") ``` ## pC. 快樂數字 ```python= for _ in range(int(input())): n = input() seen = set() while n != "1": seen.add(n) ans = 0 for i in n: ans += int(i)**2 n = str(ans) if n in seen: print("F") break else: print("T") ``` ## pD. 排列 ```python= def dfs(num, d): if len(d) == len(num): seen.add(d) for i in num: if i not in d: dfs(num, d+i) for _ in range(int(input())): n = input().split(",") k = int(n[-1]) num = n[1:-1] seen = set() dfs(num, "") print(sorted(seen)[k-1]) ``` ## pE. 大數乘冪運算 ```python= for _ in range(int(input())): n, m = [int(i) for i in input().split(",")] print(len(str(n**m))) ``` ## pF. 模數 (Modulo) ```python= for _ in range(int(input())): an, am, bn, bm, mn, mm = map(int, input().split()) ans = 0 for a in range(an, am+1): for b in range(bn, bm+1): for m in range(mn, mm+1): if (a+b)%m == (a-b)%m: ans += 1 print(ans) ``` ## pG. 樹 (找 2 節點之間最長路徑的長度) ```python= from collections import defaultdict, deque for _ in range(int(input())): arr = deque(eval(input().replace("null", "0"))) d = defaultdict(list) root = arr.popleft() q = deque([root]) while len(arr): node = q.popleft() if len(arr): a = arr.popleft() if a: d[node].append(a) d[a].append(node) q.append(a) if len(arr): a = arr.popleft() if a: d[node].append(a) d[a].append(node) q.append(a) vis = [0]*(128) seen = set() q = [root] head = 0 seen.add(root) while head < len(q): node = q[head]; head += 1 for i in d[node]: if i not in seen: seen.add(i) q.append(i) vis[i] = vis[node]+1 root = vis.index(max(vis)) q = [root] head = 0 seen = set() vis = [0]*(128) seen.add(root) while head < len(q): node = q[head]; head += 1 for i in d[node]: if i not in seen: seen.add(i) q.append(i) vis[i] = vis[node]+1 print(max(vis)) ``` ## pH. 循環排列 找群體 ```python= for _ in range(int(input())): arr = [0]+eval(input()) ans = [] seen = set() for i in range(1, len(arr)): temp = [] now = i while now not in seen: seen.add(now) temp.append(now) now = arr[now] if temp != []: ans.append(temp) print(ans) ```