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

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

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

Codeforces Round #317 AimFund Thanks-Round (Div.2)

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

A. Arrays

ざっくりと大意

・非減少の数列a,bがある。aからk個とbからm個の数を選んで、bから選んだもののが必ずaからのより大きく出来るか??

方針のようなもの

・既にソートされているので端から調べる。

python

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をそれぞれ処理する。

python

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件未満の時の処理で何度も引っかかった。