AtCoder Beginner Contest 135 過去問 (A~C)
参照
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_)