Codeforces Round #317 AimFund Thanks-Round (Div.2)
はい。
http://codeforces.com/contest/572
A. Arrays
ざっくりと大意
・非減少の数列a,bがある。aからk個とbからm個の数を選んで、bから選んだもののが必ずaからのより大きく出来るか??
方針のようなもの
・既にソートされているので端から調べる。
raw_input() k,m=map(int,raw_input().split()) a=map(int,raw_input().split()) b=map(int,raw_input().split()) print 'YES' if A[k-1]<B[-m] else 'NO'
aは小さい方からk番目、bは大きい方からm番目の数を比較すれば大丈夫だと思う。
B. Order Book
ざっくりと大意
・株とかの注文のクエリがあるのを同じ価格pの注文は数量qを加算してまとめる??
・合計n件の注文をBとSごとにBは価格が大きい方からs件、Sは価格が小さい方からs件抽出する。
方針のようなもの
・注文を整理してBとSをそれぞれ処理する。
n,s=map(int,raw_input().split()) B,S={},{} def mer(a,c,d): if a.has_key(c): a[c]+=d else: a[c]=d return a for i in range(n): d,p,q=map(str,raw_input().split()) if d=='B': B=mer(B,int(p),int(q)) else: S=mer(S,int(p),int(q)) ans_S,ans_B=[],[] for i in S: ans_S.append((i,S[i])) for i in B: ans_B.append((i,B[i])) ans_S.sort() ans_B.sort() #ans_S=ans_S[::-1] ans_B=ans_B[::-1] ss=len(ans_S) if ss>s: x=s else: x=ss tmp1=ans_S[:x] if ss: for i in range(x): tmp1s=tmp1.pop(-1) print 'S',tmp1s[0],tmp1s[1] bb=len(ans_B) if bb>s: y=s else: y=bb tmp2=ans_B[:y] if bb: for i in range(y): tmp2a=tmp2.pop(0) print 'B',tmp2a[0],tmp2a[1]
配列をソートして整理するのとかもう少し省略して書けるはず。 B,Sの抽出ルールを把握するのやs件未満の時の処理で何度も引っかかった。