AtCoder Beginner Contest 351の解説記事です。
ABC351 A – The bottom of the ninth
問題
問題文の要約は以下の通りです。
問題の要約
チーム高橋とチーム青木が野球の試合をしており、9回表が終わった時点でチーム高橋がリードしています。チーム青木は9回裏に勝つために少なくとも何点取る必要があるか求めよ。
解説
チーム高橋とチーム青木の合計得点を求めて、チーム青木が勝つために必要な点数を計算します。
解説
まずチーム高橋とチーム青木の合計得点を求めます。
# チーム高橋の合計得点
A=sum(list(map(int,input().split())))
# チーム青木の合計得点
B=sum(list(map(int,input().split())))
チーム青木が勝つために必要な点数はチーム高橋の合計得点-チーム青木の合計得点+1
なのでこれを出力します。
# チーム青木が勝つために必要な点数
print(A-B+1)
解答
# チーム高橋の合計得点
A=sum(list(map(int,input().split())))
# チーム青木の合計得点
B=sum(list(map(int,input().split())))
# チーム青木が勝つために必要な点数
print(A-B+1)
ABC351 B – Spot the Difference
問題
問題文の要約は以下の通りです。
問題の要約
縦 \(N\) マス、横 \(N\) マスのグリッドが 2 個与えられます。2 つのグリッドは 1 ヵ所だけ書かれている文字が異なるのでそのマスを求めよ。
解説
縦 \(N\) マス、横 \(N\) マスをすべて探索し、異なるマスを求める。
解説
まずマスの数と 2 つのグリッドを入力から受け取ります。
# 入力
N=int(input())
A=[input() for _ in range(N)]
B=[input() for _ in range(N)]
for
文でマスをすべて探索し、異なるマスを求めます。0-indexedになっているのでマスの数は+1
して出力します。
# AとBで異なるマスを出力する
for i in range(N):
for j in range(N):
if A[i][j]!=B[i][j]:
print(i+1,j+1)
解答
# 入力
N=int(input())
A=[input() for _ in range(N)]
B=[input() for _ in range(N)]
# AとBで異なるマスを出力する
for i in range(N):
for j in range(N):
if A[i][j]!=B[i][j]:
print(i+1,j+1)
ABC351 C – Merge the balls
問題
問題文の要約は以下の通りです。
問題の要約
空の列に \(N\) 個のボールを順に加え、その際、列の最後から 1 番目と 2 番目のボールが同じサイズであれば、それらを合成して新しいボールを作ります。この操作を隣り合うボールが同じサイズでなくなるまで繰り返します。 \(N\) 個のボールを順に加えた後の列に残るボールの数を求めよ。
解説
スタックを用いてボールを管理する。
解説
入力として整数 N
と、リスト A
を受け取ります。
また、空のリスト ans
を初期化します。
# 入力
N=int(input())
A=list(map(int, input().split()))
# 空の列
ans=[]
リスト A
の各要素 a
について、以下の操作を行います。
ans
リストが空でなく、かつ ans
の最後の要素が現在の要素 a
と同じ場合、ans
からその要素を取り除き(ポップ操作)、a
の値を1増やします。これを ans
の最後の要素が a
と異なるか、ans
が空になるまで繰り返します。
更新された a
を ans
に追加します。
for a in A:
# 列にボールが1つ以上かつ
# 最後のボールの大きさが追加するボールと同じ場合
while len(ans)>=1 and ans[-1] == a:
# 最後のボールを取り出す
ans.pop()
a += 1
# 列にボールを追加する
ans.append(a)
最終的に ans
リストの長さ(ボールの個数)を出力します。
# ボールの個数を出力する
print(len(ans))
解答
# 入力
N=int(input())
A=list(map(int, input().split()))
# 空の列
ans=[]
for a in A:
# 列にボールが1つ以上かつ
# 最後のボールの大きさが追加するボールと同じ場合
while len(ans)>=1 and ans[-1] == a:
# 最後のボールを取り出す
ans.pop()
a += 1
# 列にボールを追加する
ans.append(a)
# ボールの個数を出力する
print(len(ans))