stkblog

白血病と関係ないことを書きます なにかあったら教えて下さい

Codeforces#334 Div.2 AとB やった

A Uncowed Forces

Problem - A - Codeforces

やるだけ系問題。
問題文に書いてある数式を python でかく
250でわるところだけ一応気をつける

M = map(int, raw_input().split())
W = map(int, raw_input().split())
hs, hu = map(int, raw_input().split())


X = [500, 1000, 1500, 2000, 2500]

score = 0
for i in xrange(5):
    score += max(0.3*X[i], ( (1-(M[i]/250.0)) * X[i] - 50 * W[i] ) )

score += hs*100
score -= hu*50

print int(score)

B More Cowbell

Problem - B - Codeforces

n個の大きさの異なるカウベルを k個の同じ大きさの箱に収納する。箱の大きさがカウベルの大きさ(の和)より大きい場合でも、箱に入るカウベルは最大2個。
箱の大きさの最小値を求める。

  1. k個の箱を用意します
  2. 大きい方からとりあえず1個ずつ配っていきます
  3. 余ったのは逆順に入れていきます(全体のmaxが大きくならないように)
  4. 2つ入れた箱は和を出してから、全部の max を取ります
n, k = map(int, raw_input().split()) # 4 3
S = map(int, raw_input().split())   # 2 3 5 9

cases = [[] for _ in xrange(k)] # [ [], [], [] ]

for i in xrange(k):
    cases[i].append(S.pop())  #[ [9], [5], [3] ]

cases.reverse()  # [ [3], [5], [9] ]

for i in xrange(len(S)):
    cases[i].append(S.pop())   # [ [3, 2], [5], [9] ]

cases = map(lambda x: sum(x), cases) # [ [5], [5], [9] ]

print max(cases) # 9

n < k の場合を考えてなかったので、ランタイムエラーで無事死亡(朝起きてから気付く)

if n <= k:
    print max(S)
else:

を足せばACだった。無念

寝てるあいだに気付いた

大きさ 0 のカウベルを (2k-n) 個持ってきて、2k個のカウベルを2こずつ入れると考えると、大きいのと小さいのをペアにしていけばいいのでシンプルだった。

n, k = map(int, raw_input().split()) #4 3
S = map(int, raw_input().split()) # 2 3 5 9

S = [0] * max(0, 2*k-n) + S # 0 0 2 3 5 9

max_weight = -1
for i in xrange(len(S)/2):
    weight = S[i] + S[-i-1] # 0+9, 0+5, 2+3
    max_weight = max(max_weight, weight) 

print max_weight

C

よくわからなかったので Editorial 見て考えます