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

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

Codeforces Round #134 (Div. 2)

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

A. Mountain Scenery

ざっくりと大意

・英文が読解出来ないので図とサンプルでエスパー。

  Pypy3  

n,k=map(int,input().split())
l=[int(i) for i in input().split()]
k-=1
for i in range(1,2*n,2):
    if k==0: break
    if l[i-1]+1<l[i] and l[i+1]+1<l[i]:
        l[i]-=1
        k-=1
for i in range(2,2*n,2):
    if k==0: break
    if l[i-1]+1<l[i] and l[i+1]+1<l[i]:
        l[i]-=1
        k-=1

print(*l)

多分、山の頂点部分をk箇所削るのだと思う。削れるのは頂点部分で削った後も山が維持できる箇所。

B. Airport

ざっくりと大意

・LolekとBolekは旅行にいくための飛行機を選ぶ。
・選択した飛行機に空席がx個あったらx zlotysを払って席を確保する。
・空港が得られる最大の売上と最小の売上がいくらか。

Pypy3

import heapq

def sol(tmp,x,y):
    s=[0,0]
    while tmp:
        tmp-=1
        t=heapq.heappop(x)
        u=y.pop()
        s[0]+=t
        s[1]+=u
        t-=1
        u-=1
        y.append(u)
        y.sort()
        if t: heapq.heappush(x,t)
    return s


n,m=map(int,input().split())
a=[]
l=[heapq.heappush(a,int(i))  for i in input().split()]
b=a[:]
b.sort()
ans=sol(n,a,b)
print(ans[1],ans[0])

最小の売上は残席が少ないものから、最大の売上は残席が多いものから使えば解決する。