AtCoder Beginner Contest 129・183 A・B問題

前書き

AtCoder Beginner Contest 129・183 A・B問題を解きました。

A問題(ABC129)

  • 難易度:灰
  • 時間:1分

atcoder.jp

P,Q,R=map(int,input().split())
print(min(min(P+Q, Q+R), P+R))

B問題(ABC129)

  • 難易度:灰
  • 時間:10分

問題を見て累積和を使うとアルゴリズムが簡略化されそうだと感じました。
その結果、途中までの和 vs 残りの和の最小を調べれば良いので、O(N)で計算できます。

atcoder.jp

import itertools
N = int(input())
W = list(map(int, input().split()))
_sumW = list(itertools.accumulate(W))
_min = 100
for i in range(N):
  _min = min(abs((_sumW[-1]-_sumW[i])-_sumW[i]), _min)
print(_min)

A問題(ABC183)

  • 難易度:灰
  • 時間:1分

atcoder.jp

x = int(input())
print(max(x,0))

B問題(ABC183)

  • 難易度:灰
  • 時間:10分

atcoder.jp

幾何的な思考でアルゴリズムを考えました。
y軸座標の比をとる考え方をすれば楽に解けるはずです。
正負の符号に気をつけてください。

Sx,Sy,Gx,Gy=map(int,input().split())
print(Sx+(Gx-Sx)*(Sy/(Sy+Gy)))