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