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

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

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

Codeforces Round #343 (Div.2)

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

A. Far Relative’s Birthday Cake

ざっくりと大意

・Doorの誕生日をn * nの大きさのケーキで祝う。
・同じ行か、列にあるチョコレート(C)のペアの数。

Python2

def pscl(num,l=[1]):
    for i in range(num):
        l = map(lambda x,y:x+y,[0]+l,l+[0])
    return l

n=int(raw_input())
d={i:0 for i in range(n)}
ans=chk=0
for i in range(n):
    s=raw_input()
    t=s.count('C')
    if t>1:
        ans+=pscl(t)[2]
    for a,j in enumerate(s):
        if j=='C':
            d[a]+=1
for i in d:
    if d[i]>1:
        ans+=pscl(d[i])[2]
print ans

パスカルの三角形でnCrを求めるようなテンプレを組み込んでたから使ったけども選ぶのは必ず2つ、nC2なので別に使う必要なかった。

B. Far Relative’s Problem

ざっくりと大意

・Doorはn人の友人から誕生日をお祝いされる。M,Fは男性、女性の識別でa日からb日までが参加可能日??
・誕生日会には男性が女性を連れてきて一緒に参加する??最大の参加人数がいくつか??

Python2

n=int(raw_input())
f=[0]*368
m=[0]*368
for i in range(n):
    x,a,b=map(str,raw_input().split())
    if x=='F':
        f[int(a)]+=1
        f[int(b)+1]-=1
    else:
        m[int(a)]+=1
        m[int(b)+1]-=1
ans=chk=0
f2=m2=0
for i in range(368):
    f2+=f[i]
    m2+=m[i]
    ans=max(ans,min(f2,m2)*2)
print ans

男性、女性を別々に数列を用意して可能日の開始で+1、最終日の次の日に-1で可能な期間を管理できる。1日目から見ていって小さい方の値が参加可能な人数。人数と言っても男女ペア参加なので2倍にする。366日目まで確認してその間の最大人数を出力する。