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

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

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

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に被ってるとこを加算する。