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

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

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

VK Cup 2015 - Qualification Round 1

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

A. Reposts

ざっくりと大意

・n件の入力が name1 reposted name2 という形式でname1がname2で伝達している??
・伝達のつながりの最長を探す??

方針のようなもの

・書き方が思い浮かばないのであとで

B. Photo to Remember

ざっくりと大意

・久しぶりにあった友人たちと折角なので写真を撮りたい。
・それぞれの写真に必要な大きさがn人分与えられる。
・i番目の人が写真を撮る時はi以外の人達の幅の合計と、i以外の人達の中で最も高い人の高さが必要になる。

方針のようなもの

・それぞれi以外の人達を計算する。

python

n=int(raw_input())
width=0
h1=[0,0]
h2=[0,0]
l=[]
for i in range(n):
    w,h=map(int,raw_input().split())
    width+=w
    if h>h1[0]:
        h2=[h1[0],h1[1]]
        h1=[h,i]
    elif h>h2[0]:
        h2=[h,i]
    l.append(w)

for i,j in enumerate(l):
    if i==h1[1]:
        print (width-j)*h2[0],
    else:
        print (width-j)*h1[0],

入力受け取り時に個別のデータと合わせて幅の合計と、最も高い人と2番めに高い人をメモし続ける。 結果出力時は幅の合計から個別データを参照してその人の分だけ減算する。高さは最も高い人でなければ最も高い人の値を、最も高い人の時だけ2番目の人の値を用いる。