ABC191参戦記

プログラミング

慌ただしい1月が終わり、2月がスタートしました。

1月同様にまだドタバタしている状況ですが、可能な限りABCには参加していこうと思っています。

毎回、コンテストの振り返りをしつつ、ブログ記事の更新をしているのですが、今回のABC191の参戦記はメモ程度にACコードが載っているだけの記事です。

使用言語はPython3です。

A – Vanishing Pitch

if文の条件判定ができるかを問われているかと、基本的な速度に関する知識があるかを問われている問題。
A問題の中では難しい問題ではないかな。と思いました。

Python3だと、数値の比較で、t*v<=d<=s*v このように並べて書けるのが楽ですね。

# AtCoder Beginner Contest 191
# A - Vanishing Pitch

v,t,s,d=map(int,input().split())
if t*v<=d<=s*v:
    print("No")
else:
    print("Yes")

B – Remove It

繰り返し処理と、文字の比較ができますか。という問題。
個人的にはA問題の方が難しく感じました。

新しい空の配列を用意した後、受け取った数列を前から見ていって、Xと異なれば、新しい配列に足して、同じであれば新しい配列に足さない。という操作を実施していき、新しい配列を出力すればOKです。

# AtCoder Beginner Contest 191
# B - Remove It

n,x=map(int,input().split())
a=list(map(int,input().split()))
ans=[]
for i in range (n):
    if a[i]==x:
        pass
    else:
        ans.append(str(a[i]))
print(" ".join(ans))

最後の出力で空白区切りにするために、joinを使っていますが、配列を空白区切りで出力するのは、print(*ans) で十分です。

joinを使うために、配列に入れるときにもstrにして格納しているなど、余計なことをしていますね。
if文も、何もしないことを明示するpassを書かなくても良いように思えるので、もう少しすっきりさせて書くとこんな感じでしょうか。

n,x=map(int,input().split())
a=list(map(int,input().split()))
ans=[]
for i in range (n):
    if a[i]!=x:
        ans.append(a[i])
print(*ans)

C – Digital Graffiti

問題文が正しく読めるかが問われる問題。

私は誤読したまま解けませんでした。

隣接する4マスに黒が奇数個の場合は、角としてカウントしていけばOKです。

for文の添え字の間違えに注意してください。

# AtCoder Beginner Contest 191
# C - Digital Graffiti

h,w=map(int,input().split())
area=[]
for _ in range (h):
    l=input()
    area.append(l)

ans=0

for i in range (h-1):
    for j in range (w-1):
        C=0
        if area[i][j]=="#":
            C+=1
        if area[i+1][j]=="#":
            C+=1
        if area[i][j+1]=="#":
            C+=1
        if area[i+1][j+1]=="#":
            C+=1
        if C==1 or C==3:
            ans+=1
print(ans)

コメント

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