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

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

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

Codeforces Round #287 (Div. 2)

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

A. Amr and Music

ざっくりと大意

・n種類の楽器がありi番目の楽器を習得するには\(a_i\)日を必要とする。
・k日を掛けて楽器を練習して習得できる楽器の最大の数はいくつか。

方針のようなもの

・小さい方から見る。

n,k=map(int,raw_input().split())
a=[(int(x),i+1) for i,x in enumerate(raw_input().split())]
a.sort()
ans,chk=[],0
for i in a:
    if chk+i[0]<=k:
        ans.append(i[1])
        chk+=i[0]
    else:
        break
ans.sort()
print len(ans)
if len(ans):
    for i in ans:
        print i,

習得日数を小さいものから見る。久しぶりにenumerate使った。便利だった。

B. Amr and Pins

ざっくりと大意

・半径rの中点が(x,y)にある円の円周をピンで押さえて回して中点を(x\',y\')へ移動させるのに何手かかるか??

方針のようなもの

・初期位置と目的地と1回の移動可能な最大距離を考える。

import math
r,x,y,x2,y2=map(int,raw_input().split())
k=((x2-x)**2+(y2-y)**2)**0.5
print int(math.ceil(k/(r*2.0)))

**0.5とか少数になる要素をナシでやろうとしたけど計算が合わなくなって諦めた。。他の人のを参考にしてみてmath.ceil(x)を初めて使ってみた。x以上の最も小さい整数をfloat型で返すんだそうです。移動の端数は移動回数1回になるので繰り上がるような感じで使えたんだと思う。