Codeforces Round #246 (Div. 2)
はい。
http://codeforces.com/contest/432
A. Choosing Teams
ざっくりと大意
・n人の生徒がいてACM ICPCへの最大出場回数は各個人で5回まで。既に\(y_i\)回出場している。
・3人で1チームを作って、1人で別の2チームに入ることは出来ない。
・その作成するチームで少なくともk回出場できるようにしたい。
方針のようなもの
・5回を超える人は全て除く。
n,k=map(int,raw_input().split()) l=[x for x in raw_input().split() if int(x)+k<=5] print len(l)/3
B. Football Kit
ざっくりと大意
・サッカーでnチームがそれぞれホームゲーム用\(x_i\)とアウェーゲーム用\(y_i\)のユニフォームを持っている。
・それぞれがホームとアウェーで1試合ずつ総当り戦を行いユニフォームの色が被ったらアウェー側がホーム用のものを着用する。
・それぞれのチームがホーム/アウェーのユニフォームの使った回数を出力する。
方針のようなもの
・2重ループで総当りをみるとTLEになるのでユニフォームの数量を見る。
n=int(raw_input()) ans=[[0,0] for i in range(n)] h=[0]*100001 w=[0]*100001 l=[] m=n while m: m-=1 u=map(int,raw_input().split()) l.append(u) h[u[0]]+=1 w[u[1]]+=1 for i in range(n): a=n-1 b=0 if h[l[i][1]]==0: b=n-1 else: a+=h[l[i][1]] b+=n-1-h[l[i][1]] print a,b
ホーム/アウェーを2重ループで総当たりしなくてもホーム試合ではn-1回分はホーム用を使うことが確定しているのでホームをひとまずn-1にする。アウェーはホーム用のユニフォームで色が被ってるとこがあったらアウェー用はn-1-被ってるとこでホーム用はさっきのn-1に被ってるとこを加算する。