ABC202参戦記

プログラミング

エイシングさんが主催の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)

コメント

タイトルとURLをコピーしました