慌ただしい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)
コメント