読者です 読者をやめる 読者になる 読者になる

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

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

Codeforces Round #311 (Div.2)

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

A. Ilya and Diplomas

ざっくりと大意

・2から4行目のmin,maxの範囲の数の和でnをつくる。複数の方法がある場合は上の行の数を大きくすることを優先する??

方針のようなもの

・最小値を見た後で2行目から増やしていく。

python

n=int(raw_input())
l,ans=[],[]
for i in range(3):
    l.append(map(int,raw_input().split()))
    ans.append(l[-1][0])
for i in range(3):
    if sum(ans)<n:
        if n-sum(ans)>l[i][1]-l[i][0]:
            ans[i]=l[i][1]
        else:
            ans[i]+=n-sum(ans)
    if sum(ans)==n:
        break
print ' '.join(map(str,ans))

最小値の和を見た後で2行目のmaxまででnになるならそれで、nにならなければmaxを使って更に次の行を見に行く。

B. Pasha and Tea

ざっくりと大意

・wミリリットルのティーポットと2n個のティーカップがある。カップの容量はそれぞれ\(a_i\)ミリリットルである。
・お茶会に女性n人と男性nを招待する。女性はそれぞれxミリリットル、男性は2xミリリットルのお茶を飲む。
・それぞれが一杯だけ飲むのでティーポットにどれだけお茶を用意しておくか??

方針のようなもの

・それぞれ場合分けして調べる。

python

n,w=map(int,raw_input().split())
l=map(int,raw_input().split())
l.sort()
f=l[0]
m=l[n]
if 2*f>m:
    ans=m*n+m*n/2.0
else:
    ans=f*n+f*2*n
print ans if ans<w else w

ティーカップをソートしてから最初はn-1,n番目を見ててWA。見るのは0,n番目だった。。。0番目の2倍よりn番目が小さかったら男性たちはn番目の量で女性たちはその半分になる。0番目の2倍よりn番目が大きければ女性たちは0番目の量で男性たちは0番目の倍の量を。女性をn-1番目ので見てしまうとティーカップが溢れる人が出てきてしまうのでWAになる。