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

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

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

Codeforces Round #264 (Div.2)

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

A. Caisa and Sugar

ざっくりと大意

・Caisaはパーティの準備のためにお金sを握りしめてスーパーでとある砂糖をn種類の中から1種類だけ買う。
・\(x_i\)ドル\(y_i\)セントの買い物のお釣りのセントの分はスイーツで受け取れるのでスイーツが多くもらえるようにお買い物をしたい。
・得ることの出来る最大のスイーツ量か、砂糖のお買い物すら出来なければ-1を出力する。
・"maybe he able to buy one. " 多分コレは1パックしか買わないという意味なので要注意。予算10ドルで砂糖2ドル70セントのものを1パックだとお釣りが30スイーツ、2パックだと60スイーツとかではなくて1パックしか買わない。

方針のようなもの

・全部計算する。

n,s=map(int,raw_input().split())
ans=-1
s*=100
while n:
    n-=1
    x,y=map(int,raw_input().split())
    t=x*100+y
    if s>=t:
        if y==0:
            ex=0
        else:
            ex=100-y
        ans=max(ans,ex)
print ans

買うのは1パックだけ、端数0のものは得られるスイーツも0、予算で買える砂糖かどうかの処理を間違えなければ多分大丈夫。

B. Caisa and Pylons

ざっくりと大意

・Caisaはn+1個ある0からnまでのパイロンをジャンプして越えるゲームをしている??
・パイロンを越していくとCaisaに \(h_k\) - \(h_{K+1}\) のエネルギーの加減が起きる。
・ゴールまでに一度もエネルギーが負の値にならないためにはスタート前にエネルギーがいくつあればよいか??

方針のようなもの

・シミュレートする。

n=int(raw_input())
l=[int(x) for x in raw_input().split()]
l.insert(0,0)
ans=chk=0
for i in range(n):
    chk=chk+(l[i]-l[i+1])
    ans=min(ans,chk)
print abs(ans)

スタートからゴールまでのエネルギーの加減をシミュレートしてminをチェックして0より小さくなればその絶対値が事前に必要なエネルギーだと思う。
シミュらなくても数列の中の最大値が解になるらしいのですがそれがどうしてそうなるのかは全く理解してないです。