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

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

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

Codeforces Round #357 (Div.2)

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

A. A Good Contest

ざっくりと大意

Codeforcesでは2400以上が赤、2200以上2400未満がオレンジである。
・赤い人がコンテスト後に更にレーティングが上がっているか??

Python2

n=int(raw_input())
ans=chk=0
for i in range(n):
    name,before,after=map(str,raw_input().split())
    if int(before)>=2400 and int(before)<int(after):
        print 'YES'
        exit()
print 'NO'

複数のクエリ中で一人でも上がってればYES、そうでなければNOなのはサンプルからわかるようになっているので特に引っかかるトコはないはず。と思ったら赤が2400以上か、2400より大きいかの読み違えでHack祭になっていた模様。。

B. Economy Game

ざっくりと大意

・1234567,123456,1234からnをつくれるか。

Python2

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

n=int(raw_input())
a,b,c=1234567,123456,1234
for i in range(811):
    tmp=n-a*i
    for j in range(tmp/b+1):
        if (tmp-b*j)%c==0:
            print 'YES'
            exit()
print 'NO'

探し方としては除いていって0に出来るかという感じで探した。ループ回数の上限が大きいようにみえるけど、公約数とかでうまく処理されて上限まで行ってないと思う。

C. Heap Operations

ざっくりと大意

・heapキューのような処理で足りない命令を捕捉する。
・insertはキューに追加する。getMinは最小値の確認。removeMinはキューから最小値を1つ除く。

Python2

#TLE 解決できず
import heapq

n=int(raw_input())
l=[]
ans=[]
for i in xrange(n):
    q=raw_input()
    if q[0]=='r' and len(l)==0:
        ans.append('insert 1')
        ans.append(q)
    elif q[0]=='r':
        heapq.heappop(l)
        ans.append(q)
    elif q[0]=='i':
        ans.append(q)
        t=int(q.replace('insert ',''))
        heapq.heappush(l,t)
    else:
        t=int(q.split()[1])
        if t not in l:
            ans.append('insert '+str(t))
            heapq.heappush(l,t)
        while l[0]!=t:
            ans.append('removeMin')
            heapq.heappop(l)
        ans.append('getMin '+str(t))
print len(ans)
for i in ans:
    print i

TLE解決できず。。。他にPython2で通してる人たちもTLEギリギリっぽいが違いがよく分からず。。。