君はまるで砂漠に咲く、一輪の花。

僕はその花に引き寄せられる蝶。

Codeforces Round #334 (Div.2)

はい。
http://codeforces.com/contest/604

A. Uncowed Forces

ざっくりと大意

・Kevin全完した最終スコアを計算する。mは提出した時間、wは再提出回数、hはハック成功と失敗。
・問題1-5までで500,1000,1500,2000,2500。ハック成功は100、ハック失敗は-50。
・(問題の点数をxとして)0.3 * xか、(1 - m/250) * x - 50 * wの大きい方がスコアになる。

方針のようなもの

・計算する。

python

m=map(int,raw_input().split())
w=map(int,raw_input().split())
s,u=map(int,raw_input().split())
ans=chk=0
l=[500,1000,1500,2000,2500]
for a,i in enumerate(l):
    ans+=max((i*(250-m[a]))/250-(w[a]*50),3*i/10)
print ans+100*s+(-50*u)

解は整数だけになるはずだし、なるべく浮動小数を避けつつ切り捨てで計算した。

B. More Cowbell

ざっくりと大意

・n個のcowbellをNaperthrillからExeterへ移動させたい。移動前にはk個の箱に詰め込む。
・1つの箱にはcowbellを2個まで入れられる。全部同じサイズの箱で用意するのに最小サイズにしたい。

方針のようなもの

・式で求める方法が思いつかないのでシミュレートして最大値を探す。

python

n,k=map(int,raw_input().split())
s=map(int,raw_input().split())
ans=0
chk=[0]*k
tmp=min(n,k)
for i in range(tmp):
    chk[i]+=s.pop(-1)
for i in range(-1,-(n-tmp)-1,-1):
    chk[i]+=s.pop(-1)
print max(chk)

大きいものから使って1つずつ箱に入れる。余りがあったらより小さいものが入っている箱に余りのうちで大きい物を詰めていく。cowbellが最大100000で結構時間かかる処理かと思ったけどそうでもなかった。