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

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

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

Codeforces Round #280 (Div. 2)

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

A. Vanya and Cubes

ざっくりと大意

・n個のキューブで最も高く作れるピラミッドは何段か???
・ピラミッドの1段目は1キューブ、2段目は1+2で3キューブで合計でが4キューブ使ってる。3段目は1+2+3で6キューブで合計では10キューブ使ってる。

方針のようなもの

・1段ずつ増やしていく。

n=int(raw_input())
w=t=r=0
while w<n:
    t+=1
    r+=t
    w+=r
print t if w==n else t-1

加算する式を書くだけで凄い苦戦した。。。使うキューブの数nは0でないことが保証されている。tでいま何段目かを数えて1から段目までの総和がその段だけで使っているキューブの数rになる。全ての段の確認ごとにrをwに加算することで全段の合計で何個のキューブを使っているかがwで分かる。加算を続けていてwとnがぴったり同じになることがあったらその段目は作れるのでtを出力、wがnより大きくなったらwとnの差分が足りずにその段目を実は作れないのでt-1を出力。

B. Vanya and Lanterns

ざっくりと大意

・長さがlの道路の\(a_i\)の箇所にn個の照明がある。道路を隈なく照らすのにはどれくらいの幅が照らせればよいか??

方針のようなもの

・照明の区間で長いトコを探す。

n,l=map(int,raw_input().split())
a=map(int,raw_input().split())
a.sort()
ans=max(a[0],l-a[-1])
for i in range(n-1):
    ans=max(ans,(a[i+1]-a[i])/2.0)
print ans

照明の設置場所をソートして、端まで照らすのに左側は最小値は0との差分が必要、右側は最大値とlとの差分が必要。中間にある照明は隣との距離を2で割った幅でその区間を照らすことが出来る。ソートして端側の処理を間違えなければ多分大丈夫。