2019-06-10に投稿

Pythonで競プロ|ABC129B|

AtCoder Beginner Contest 129BをPythonで解く

今回は、AtCoder Beginner Contest 129B
を解いていきたいと思います。

問題文

1から Nの番号がついた N個の重りがあり、番号 iの重りの重さは Wiです。
ある整数 1≤T
このような分け方全てを考えた時、S1と S2の差の絶対値の最小値を求めてください。

こう考えた

  • S1とS2の合計は、おもりの全ての和sum()になる。
  • sum()-S1=S2が成り立つ。
  • 全検索してリストに格納しmin()を用いて出力する。

実装したコード

N=int(input())
W=list(map(int,input().split()))
L=[]
for i in W:
  A=sum(W[:i])
  B=sum(W)-sum(W[:i])
  L.append(abs(A-B))
print(min(L))

結果

WAでした。

🐍なんでや!!

🐶落ち着け。Wでなんでforを回してるねん。順番ずれるし番号めちゃくちゃや。

🐍!!

冷静になりACしたコード

N=int(input())
W=list(map(int,input().split()))
L=[]
for i in range(N):
  A=sum(W[:i])
  B=sum(W)-sum(W[:i])
  L.append(abs(A-B))
print(min(L))

🐍ACしたで!

勉強になったコード

n,*w=map(int,open(0).read().split());print(min(abs(sum(w[:i])-sum(w[i:]))for i in range(n)))

🐍1行で書けるの?
🐶;で分割されてるで

  • n,*w=map(int,open(0).read().split())ですべての入力を受けてます

  • nwにそれぞれ格納されます。

  • min(abs(sum(w[:i])-sum(w[i:]))for i in range(n)

  • abs(sum(w[:i])-sum(w[i:])))で絶対値をとりにいきforでリストに格納します

🐍open(0).read().split()は便利そう。

Originally published at www.coderecipe.org

view_list Pythonで競プロ
第1回 Pythonで競プロ|ABC129A|
第2回 Pythonで競プロ|ABC129B|
第3回 Pythonで競プロ|ABC129C|
第4回 AtCoder Beginner Contest 073CをPythonで解く
第5回 AtCoder Beginner Contest 095CをPythonで解く

aocory

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

関連記事

コメント