エイシングさんが主催のAtCoder Beginner Contest 202の振り返り記事です。
AtCoder Heuristic Contest 003に参加しており、ABC202の振り返りをさぼっていましたが、ABC202のAからC問題までの考えたことと、ACコードを残しておきます。
使用言語はPython3で、私のレート帯は茶色下位から中位くらいです。
A – Three Dice
ちょっとした計算問題。
問題文にヒントが書いてあるため、そこから答えがわかるかと思います。
# エイシングプログラミングコンテスト2021(AtCoder Beginner Contest 202)
# A - Three Dice
a,b,c=map(int,input().split())
a=7-a
b=7-b
c=7-c
print(a+b+c)
各変数a,b,cごとに計算していますが、まとめて、21からa,b,cをそれぞれ引いた数を答えとして出力してもOKです。
一行で書いてみました。
print(21-sum(map(int,input().split())))
B – 180°
繰り返し処理と条件分岐、reverse処理が書けるかが問われる問題。
条件分岐に関しては、問題文に書いてある通りに実装していけばOKです。
つまり、 0, 1, 8 の時は、それぞれ 0, 1, 8 を返し、6 の時は 9 を、9 の時は 6 を返すif文を書けばよいですね。
あとは、reverseの処理は、スライス処理の[ : : -1 ] を使えば逆順になります。
あとは、joinして出力すればOKです。
joinは、文字列型ではないとダメなので、配列内で持つデータはstr型にして持っておきます。
# エイシングプログラミングコンテスト2021(AtCoder Beginner Contest 202)
# B - 180°
S=list(map(int,input()))
ans=[]
for s in S:
if s==0 or s==1 or s==8:
ans.append(str(s))
if s==6:
ans.append(str(9))
if s==9:
ans.append(str(6))
ans=ans[::-1]
print("".join(ans))
C – Made Up
確認したい対象を一旦別の配列に格納して利用する問題。
一言で書くと上記のようになると思うのですが、ちょっと何言っているかわからないですね。
まず、組み合わせの数は、出現回数を掛けることで求まります。
次にAとCについて、出現回数をカウントしていきます。Cについては、Bのindexになるので、-1するのを忘れないようにしましょう。
あとは、Cの出現回数の配列で、1以上の場合は、Bの数列を確認して、その数がAに何回出現しているかを確認して、掛け算したものを足し合わせていけば答えが求まります。
# エイシングプログラミングコンテスト2021(AtCoder Beginner Contest 202)
# C - Made Up
N=int(input())
A=list(map(int,input().split()))
B=list(map(int,input().split()))
C=list(map(int,input().split()))
ans=0
a_list=[0]*(10**5+5)
for a in A:
a_list[a]+=1
c_list=[0]*(10**5+5)
for c in C:
c_list[c-1]+=1
for i in range (10**5+5):
if c_list[i]==0:
continue
else:
num=B[i]
ans+=c_list[i] * a_list[num]
print(ans)
コメント