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で上書きして解のリストに追加する。解のリストはどちらのチームも共通。最後のカードまで見終わったら解のリストをカードを貰う時間順で、チーム名 背番号 時間を出力する。レッドカードでも退場にならずに試合に参加できる不思議なので最初のレッドカードの情報のみを出力することに注意する。