AtCoder Beginner Contest 135 過去問 (A~C)

参照

atcoder.jp

A問題

2分くらい。

a,b = map(int, input().split())
 
if abs(a-b)%2!=0: print('IMPOSSIBLE')
else: print(int((a+b)/2))

B問題

初期配列とソートされた配列の差から、
差が0ではない要素が2つ以上存在するときNOとします。

Numpyだと配列-配列ができるので楽ですね。
書いてる途中に方針転換したので、10分くらいかかってしまいました。

import numpy as np
n = int(input())
p = np.array(list(map(int, input().split())))
 
pp = np.array(sorted(p))-p
sum_=0
for i in pp:
  if i!=0: sum_+=1
if sum_>2: print('NO')
else: print('YES')

C問題

正直綺麗なコードではないですが、
ACで10分かからない時間で解けました。
コードが冗長なのでは目をつぶってください。

  • i番目の勇者がi番目の街のMを全て倒しきれなかった
  • i番目の勇者がi番目の街のMを全て倒し and i番目の勇者がi+1番目の街のMを全て倒した
  • i番目の勇者がi番目の街のMを全て倒し and i番目の勇者がi+1番目の街のMを全て倒しきれなかった

の3パターンに分けて考えました。

n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
 
sum_ = 0
for i in range(n):
  if a[i]>=b[i]:
    a[i]-=b[i]
    sum_+=b[i]
    b[i]=0
  else:
    b[i]-=a[i]
    sum_+=a[i]
    a[i]=0
    if a[i+1]>=b[i]:
      a[i+1]-=b[i]
      sum_+=b[i]
      b[i]=0
    else:
      b[i]-=a[i+1]
      sum_+=a[i+1]
      a[i+1]=0
print(sum_)