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))
