A – Harmony
1 2 3 4 5 6 7 |
a,b = map(int, input().split()) if a%2==0 and b%2 ==0: print((a+b)//2) elif a%2!=0 and b%2!=0: print((a+b)//2) else: print('IMPOSSIBLE') |
C – City Savers
方針
・i番目の町の勇者が、i番目の町の敵をできるだけ倒す。
・i番目の町の勇者が、i番目の町の敵を倒した後、まだ敵を倒せるならi+1番目の敵をできるだけ倒す。
解答
コード・コメント
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#入力 n = int(input()) A = list(map(int, input().split())) B = list(map(int, input().split())) #解答用の変数を0で初期化 ans = 0 #Bを全探索:計算量はO(N):Bの最大値は10の9乗なので間に合う for i in range(len(B)): #i番目の勇者が倒せる敵の数が、i番目の町の敵の数より多い場合 if B[i]>=A[i]: #tmpに勇者の余力(倒せる敵の数の残り)を記録。町i+1で倒す敵の数の計算に用いる tmp = B[i]-A[i] #ansに倒した敵の数を加える ans += A[i] #勇者iの余力が町i+1の敵の数以下の場合 if tmp<=A[i+1]: #勇者iの余力をansに加える(結局、勇者iが倒せる敵の数B[i]と一致する) ans += B[i]-A[i] #町i+1の敵の残りの数を更新 #(B[i]-A[i])は勇者の余力(勇者iが倒せる数-町iの敵の数)であり、町i+1では勇者の余力だけ敵を倒すのでその数を町i+1の敵の数から差し引く A[i+1] = A[i+1]-(B[i]-A[i]) #勇者の余力が町i+1の敵の数よりも大きい場合 else: #ansに町i+1の敵の数を加える ans += A[i+1] #町i+1の敵の数を更新(勇者iが町iと町i+1の敵を全員倒した。勇者i+1は町i+2の敵を倒しに行くことができる。) A[i+1] = 0 #i番目の勇者が倒せる敵の数が、i番目の町の敵の数より少ない場合 else: #勇者iが倒せる敵の数をansに加える。勇者iは倒せる敵はもういないので、このパターンでは町i+1の処理は行わない。 ans += B[i] #解答を出力 print(ans) |
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
n = int(input()) A = list(map(int, input().split())) B = list(map(int, input().split())) ans = 0 for i in range(len(B)): if B[i]>=A[i]: tmp = B[i]-A[i] ans += A[i] if tmp<=A[i+1]: ans += B[i]-A[i] A[i+1] = A[i+1]-(B[i]-A[i]) else: ans += A[i+1] A[i+1] = 0 else: ans += B[i] print(ans) |
コメント