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])
最小の売上は残席が少ないものから、最大の売上は残席が多いものから使えば解決する。