[AtCoder Beginners Selection]C問題解いてみた!
初めに
本記事ではAtCoder Beginners SelectionのC問題を解説します!
ABC085C - Otoshidama
入力を変数N, Yで受け取ります。
N, Y = map(int, input().split())
10000円札i枚(iは1以上N以下)、5000円札j枚(jは1以上N-i以下)、1000円札N-i-j枚のとき、合計金額がY円となるか判定します。そして、N枚のお札の合計金額がY円となった場合は、そのときのお札の枚数を出力し、プログラ厶を終了します。一方、N枚のお札の合計金額がY円とならない場合は、-1 -1 -1と出力します。
for i in range(N+1):
for j in range(N-i+1):
k = N-i-j
total = 10000*i + 5000*j + 1000*k
if total == Y:
print(i, j, k)
exit()
print(-1, -1, -1)
ABC049C - 白昼夢
まず、入力を変数sで受け取ります。
s = input()
入力された文字列と、dream, dreamer, erase, eraserからなる文字列が等しくできるか判定します。つまり、入力された文字列からdream, dreamer, erase, eraserを消していき、全て消去できた場合はYES、できなかった場合はNOと出力すれば良いことになります。
ここで注意点があり、消す順番を考える必要があります。具体的には、dreamer -> dream、eraser -> eraseの順番で消す必要があります。例えば、eraserという文字列からeraseを消してしまうと、rが残ってしまいます。さらに、dreamerより先に、eraser, eraseを消去する必要があります。例えば、dreameraseという文字列を考えるとdream, eraseに分割できますが、dreamerを先に消去するとaseが残ってしまいます。
s = s.replace('eraser', '')
s = s.replace('erase', '')
s = s.replace('dreamer', '')
s = s.replace('dream', '')
if s:
print('NO')
else:
print('YES')
ABC086C - Traveling
まず、入力を変数Nで受け取ります。
N = int(input())
次に、直前のt, x, yの値を格納する変数t_before, x_before, y_beforeを定義します。また、旅行プランが実行可能かどうか判定する変数flagを定義します。
t_before = 0
x_before = 0
y_before = 0
flag = 1
次に、時刻とその時刻にいる予定である座標を変数t, x, yで受け取ります。
t, x, y = map(int, input().split())
次に、直前の時刻と現在の時刻の差を表す変数time、直前の時刻から現在の時刻までに移動する距離を表す変数distanceを定義します。
time = t-t_before
distance = abs(x-x_before) + abs(y-y_before)
時間1で距離1しか進めないため、時間timeより距離distanceが大きい場合は実現不可能です。また、時間timeと距離distanceの偶奇が合わない場合も実現不可能です。よって、以上の場合はflagを0に更新し、forループからbreakします。
if time < distance:
flag = 0
elif time % 2 != distance % 2:
flag = 0
if flag == 0:
break
最後に、flagが1の場合はYes、flagが0の場合はNoを出力します。
if flag:
print('Yes')
else:
print('No')
以上の操作をN回繰り返します。なお、直前の時刻t_before、直前の座標x_before, y_beforeは、操作を繰り返す毎にt, x, yに変更する必要があります。以上のことからコード全体は次のようになります。
N = int(input())
t_before = 0
x_before = 0
y_before = 0
flag = 1
for _ in range(N):
t, x, y = map(int, input().split())
time = t - t_before
distance = abs(x-x_before) + abs(y-y_before)
if time < distance:
flag = 0
elif time % 2 != distance % 2:
flag = 0
if flag == 0:
break
t_before = t
x_before = x
y_before = y
if flag:
print('Yes')
else:
print('No')
Discussion