# 110 學年度商業類學生技藝競賽 題目出處:[點擊](https://sci.me.ntnu.edu.tw/PortalFile/ContestData/9379/b74eecc4-4d74-44e7-97f0-208c205ce41b.zip) # pA. 二數有權重的相加 ```python= while True: try: a,b=map(int,input().split()) except: break print(4*a+6*b) ``` # pB. 閏年(多行版) ```python= for _ in range(int(input())): n=int(input()) if n%4==0 and n%100!=0 or n%400==0: print('a leap year') else: print('a normal year') ``` # pC. 所有位數加減加減 ```python= while True: try: n=list(map(int,list(input()))) except: break ans=n[0] for i in range(1,len(n)): if i%2==0: ans-=n[i] else: ans+=n[i] print(ans) ``` # pD. 最大偶數和 ```python= n=int(input()) l=[int(i) for i in input().split()] l.sort() head=0 while sum(l)%2!=0: if l[head]%2!=0: l.pop(head) else: head+=1 print(sum(l)) ``` # pE. 字典 ```python= d={} while True: try: v,k=input().split() except: break d[k]=v while True: try: k=input() except: break if k not in d: print('eh') else: print(d[k]) ``` # pF. 抱怨值問題 ```python= n=int(input()) l=[int(i) for i in input().split()] ans=0 for i in range(1,n): for j in range(0,i): if l[i]<l[j]: ans+=1 print(ans) ``` # pG. 猜數字 ```python= while True: try: ans=input().split() except: break for _ in range(int(input())): temp=input().split() A,B=0,0 ans_temp=ans.copy() for i in range(4): if ans_temp[i]==temp[i]: A+=1 ans_temp[i]='-1' temp[i]='-1' for i in range(4): if temp[i] in ans_temp and temp[i]!='-1': B+=1 print(f'{A}A{B}B') ``` DOMjudge測資有誤 # pH.校驗和 ```python= for _ in range(int(input())): head = input().split() total = 0 for i in range(0, len(head), 2): #轉換成16進位 word = int(head[i], 16) << 8 | int(head[i+1], 16) total += word while total >> 16: #溢位 total = (total & 0xFFFF) + (total >> 16) check = ~total & 0xFFFF #一補數 print(format(check, '04x')) #顯示出四位的十六進制 ``` # pI. 123 ```python= for _ in range(int(input())): en=input() if len(en)>3: print(3) else: one=0 two=0 if en[0]=='o': one+=1 elif en[0]=='t': two+=1 if en[1]=='n': one+=1 elif en[1]=='w': two+=1 if en[2]=='e': one+=1 elif en[2]=='o': two+=1 if one>two: print(1) else: print(2) ``` # pJ 噁爛數 ```python= n=int(input()) a=[int(i) for i in input().split()] for i in a: flag=False for x in range(7,i+1): if i%x==0: for y in range(2,int(x**0.5)+1): if x%y==0: break else: print(False) flag=True break if flag: break else: print(True) ``` TLE # pK. 求餘數 ```python= def exp(x,y,p): if y == 0:return 1 if y&1: return (exp(x, y-1,p)*x)%p t = exp(x, y//2, p) return t*t%p while True: try: B = int(input()) P = int(input()) M = int(input()) print(exp(B, P, M)) input().strip() except EOFError: break ``` :::info Wrong answer on line 4 of output (corresponding to line 4 in answer file) User EOF while judge had more output (Next judge token: 2) ::: # pL. 質數 ```python= while True: try: n,c=map(int,input().split()) except: break k=[1] for i in range(2,n+1): for j in range(2,int(i**0.5)+1): if i%j==0: break else: k.append(i) if len(k)&1: if len(k)<(2*c)-1: print(str(n),str(c)+':',*k) else: print(str(n),str(c)+':',*k[len(k)//2-(c-1):len(k)//2+(c)]) else: if len(k)<(2*c): print(str(n),str(c)+':',*k) else: print(str(n),str(c)+':',*k[len(k)//2-c:len(k)//2+(c)]) print() ``` # pM. 矩陣的直積 ```python= a_r,a_c,b_r,b_c=map(int,input().split()) a=[] b=[] arr=[] for i in range(a_r): a.append([int(i) for i in input().split()]) for i in range(b_r): b.append([int(i) for i in input().split()]) for i in range(a_r): for g in range(b_r): temp=[] for j in range(a_c): for h in range(b_c): temp.append(a[i][j]*b[g][h]) arr.append(temp) for i in arr: print(*i) ``` # pN. 字串編輯距離 DP建表 $$ dp(i,j)= \begin{cases} dp(i-1,j-1), & \text{if } a_i=b_j\\ min(dp(i-1,j-1),dp(i-1,j),dp(i,j-1))+1 & \text{if } a_i\not =b_j \end{cases} $$ ```python= a=input() b=input() dp=[[0]*(len(b)+1) for _ in range(len(a)+1)] for i in range(len(a)+1): dp[i][0]=i for i in range(len(b)+1): dp[0][i]=i 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] else: dp[i][j]=min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])+1 print(dp[-1][-1]) ``` # pO. 最長共同⼦序列LCS(Longest common subsequence) $$ dp(i,j,k)= \begin{cases} dp(i-1,j-1,k-1)+1, & \text{if } a_i=b_j=c_k\\ max(dp(i-1,j,k),dp(i,j-1,k),dp(i,j,k-1)) & \text{if } a_i\not =b_j\not =c_k \end{cases} $$ ```python= a=list(input()) b=list(input()) c=list(input()) dp=[[[0]*(len(c)+1)for _ in range(len(b)+1)] for _ in range(len(a)+1)] for i in range(len(a)): for j in range(len(b)): for k in range(len(c)): if a[i]==b[j]==c[k]: dp[i][j][k]=dp[i-1][j-1][k-1]+1 else: dp[i][j][k]=max(dp[i-1][j][k],dp[i][j-1][k],dp[i][j][k-1]) print(dp[len(a)-1][len(b)-1][len(c)-1]) ``` # pP. 錢幣 ```python= input() coins = [int(i) for i in input().split()] m = sum(coins) dp = [0]*(m+1) dp[0] = 1 for coin in coins: for i in range(m, coin-1, -1): dp[i] += dp[i-coin] dp = [str(i) for i in range(1, m+1) if dp[i] > 0] print(len(dp)) print(*dp) ``` # pQ. 果⼦堆合併 ```python= input() n = [int(i) for i in input().split()] ans = 0 while len(n) > 1: n.sort(reverse = True) a = n.pop() b = n.pop() ans += a+b n.append(a+b) print(ans) ``` # pR. 條條⼤路通羅⾺ ```python= n, m = map(int, input().split()) d = {} for _ in range(m): a, b = map(int, input().split()) if d.get(a): d[a].append(b) else: d[a] = [b] a, b = map(int, input().split()) q = [a] seen = set() head = 0 flag = False while head < len(q): node = q[head];head += 1 if d.get(node): for i in d[node]: if d.get(i) and i not in seen: if i == b: print("Yes") flag = True break seen.add(i) q.append(i) if flag: break else: print("No") ```