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

Codeforces Round #287 (Div. 2)

はい。 oo---(0/0) 1273(+288)
過去最高に順調に解けた回だった。B問題はなんとかなるようになってきたのでもう少し安定して解けるようにとC問題も出来るようになれば成績がもう少し上がるんですが。。
http://codeforces.com/contest/507

A. Amr and Music

ざっくりと大意

・n種類の楽器を利用するのにそれぞれ\(a_i\)日が必要で練習に使えるのは全部でk日である。
・より多くの種類の楽器を練習できるように選択した時に練習する楽器の個数と何番目のを使うかを出力する。

方針のようなもの

・\(a_i\)が小さいものから使おう。

n,k=map(int,raw_input().split())
l=map(int,raw_input().split())
ans=[]
chk=0
while 1:
    x=min(l)
    if k<chk+x:
        break
    else:
        chk+=x
        m=l.index(x)
        ans.append(m+1)
        l[m]=10001
print len(ans)
if len(ans):
    print ' '.join(map(str,ans))

テストケースが小さいから処理時間には大して影響してなかったけどコンテスト中はなぜかansをソートしてた。番目が小さい順である必要はなかったしソートした理由が思い出せない。。。

B. Amr and Pins

ざっくりと大意

・中点がx,yの位置の半径rの円を円周の何処かをピンで押さえてx',y'の位置に中点を移動させるのに何回かかるか??

方針のようなもの

・サンプルを信じれば1回で移動できる最大距離はr*2なのを信じる。

r,x,y,x2,y2=map(int,raw_input().split())
p=((x2-x)**2+(y2-y)**2)**0.5
if p%(r*2.0)==0:
    print int(p/(r*2))
else:
    print int(p/(r*2))+1

2点の距離をみてr*2で割り切れるならその商を、割り切れないなら+1してという単純な思考で何とかなってしまった。少数を浮動小数を%で適当に余りを計算してよくも誤差死にしなかったもんです。。。