【AtCoder】ABC351解説(Python)

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 が空になるまで繰り返します。

    更新された aans に追加します。

    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))
      よかったらシェアしてね!
      • URLをコピーしました!
      • URLをコピーしました!
      目次