エイシングプログラミングコンテスト2021(AtCoder Beginner Contest 202)

A~Cに回答できました.Dができそうでできず...
(最近,最初の30分以降問題が解けません)


A - Three Dice

$21- (a+b+c)$です.

B - 180°

これも愚直に.最初''を忘れて整数と文字列を比較するミスをしました.

S = list(input())
ans = []
for s in reversed(S):
  if s == '6':
    ans += '9'
  elif s == '9':
    ans += '6'
  else:
    ans += s
    
print(''.join(ans))

C - Made Up

ちょっと悩みましたが,カウントすれば良さそうなことはすぐわかりました.

つまり

\begin{aligned}
\begin{cases}
\, \mathrm{cnta}[j] = (A_{i} = j\text{となる$i$の個数}) \\
\, \mathrm{cntbc}[j] = (B_{C_{i}} = j\text{となる$i$の個数})
\end{cases}
\end{aligned}
とすれば,答えは
\begin{aligned}
\sum_{j=1}^{N} \mathrm{cnta}[j]\cdot \mathrm{cntbc}[j]
\end{aligned}
です.

N = int(input())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
C = list(map(int, input().split()))


cnta = [0] * N
for a in A:
  cnta[a - 1] += 1

cntbc = [0] * N
for c in C:
  bc = B[c - 1]
  cntbc[bc - 1] += 1
    
print(sum([i*j for i, j in zip(cnta, cntbc)]))

D - aab aba baa

1文字目を決めると,小さな問題に帰着します.

解法は以下:
aab aba baa [エイシングプログラミングコンテスト2021(AtCoder Beginner Contest 202) D] - はまやんはまやんはまやん

実装は,次がシンプルで良いです.
Submission #22806989 - AISing Programming Contest 2021(AtCoder Beginner Contest 202)

E - Count Descendants

F - Integer Convex Hull