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

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

Codeforces Round #281 (Div. 2)

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

A. Vasya and Football

ざっくりと大意

・Vasyaはサッカーの試合を見ていてファールの際にイエローカードかレッドカードが出ることに気づいた。
・だがイエローカードが2枚目の時はレッドカードになる。
・入力は1行目にホームチーム、2行目にアウェイチーム。3行目にカードの出た件数。以降はカードの出た時間, どちらのチームか, 背番号?, イエローかレッド が与えられる。
・各プレイヤーにレッドカードがでることがあるなら最初のカードの時間を出力する。

方針のようなもの

・チームごと別々にチェックする。

hm=raw_input()
aw=raw_input()
n=int(raw_input())
hnumber=[-1 for i in xrange(100)]
anumber=[-1 for i in xrange(100)]
ans=[]
while n:
    n-=1
    a,b,c,d=map(str,raw_input().split())
    if b=='h':
        x=int(c)
        if hnumber[x]==-1:
            if d=='y':
                hnumber[x]=int(a)
            else:
                ans.append((int(a),hm,c))
                hnumber[x]=100
        elif hnumber[x]<100:
            ans.append((int(a),hm,c))
            hnumber[x]=100
    elif b=='a':
        x=int(c)
        if anumber[x]==-1:
            if d=='y':
                anumber[x]=int(a)
            else:
                ans.append((int(a),aw,c))
                anumber[x]=100
        elif anumber[x]<100:
            ans.append((int(a),aw,c))
            anumber[x]=100
ans.sort()
for i in ans:
    print i[1],i[2],i[0]

チーム別々にチームの最大人数99人分を-1で埋めたリストを用意。イエローカードorレッドカードごとにその番号の人のトコを見に行く。-1でイエローカードなら時間を-1に上書きしてメモ、-1でレッドカードなら時間を100で上書きして解のリストに追加、時間が-1より大きくかつ100未満なら時間を100で上書きして解のリストに追加する。解のリストはどちらのチームも共通。最後のカードまで見終わったら解のリストをカードを貰う時間順で、チーム名 背番号 時間を出力する。レッドカードでも退場にならずに試合に参加できる不思議なので最初のレッドカードの情報のみを出力することに注意する。