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

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

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

Codeforces Round #368 (Div.2)

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

A. Brain's Photos

ざっくりと大意

・white, black and grey のみの写真は#Black&White、そうでなければ#Colorとなる。

Python2

n,m=map(int,raw_input().split())
c=set(['C','M','Y'])
for i in range(n):
    if c&set(raw_input().split()):
        print '#Color'
        exit()
print '#Black&White'

1行ごとにCMYのいずれかがあるかを確認してカラー判定をした。最近たまたま見かけたのでset型にして&でお互いに重複要素があるかでCMYをさがした。

B. Bakery

ざっくりと大意

・Mashaはパン屋を開いて1からnまでのどこかの都市でマフィンを焼きたい?
・m個の双方向に移動できる道路で都市はつながっていて、通行料はl。
・マフィンを焼くための小麦を貯蔵できる都市はk箇所でそれぞれの都市番号は\(a_i\)
・パン屋が開業できるのは小麦貯蔵用のk箇所以外の都市である。
・小麦粉の運搬を最安でパン屋を開業するのに通行料はいくらか?もしくは開業不能なら-1。

Python2

IS=float('inf')

n,m,k=map(int,raw_input().split())
d=[]
for i in range(m):
    d.append(map(int,raw_input().split()))
if k:
    a=set(map(int,raw_input().split()))
else:
    a=set([])
ans=chk=IS
for u,v,c in d:
    if len(a&set([u,v]))==1:
        ans=min(ans,c)
print ans if ans!=IS else -1

人の解説とか読むまで方針が立てられなかった。都市がつながっているのをUnionFindするのかとか、最安値をダイクストラとか思ってたら全然関係なかった。道路情報を全部メモして(可能なら同じ都市間のは安い方だけ)、入力の最後で貯蔵の情報を受け取ったら道路情報を片方の都市だけ貯蔵の都市のデータを探して通行料の安いのを更新していけば大丈夫だった。

C. Pythagorean Triples

ざっくりと大意

・直角三角形の斜辺の長さがn、他の2辺m,kが整数となるようなものが存在すればm,kを出力、なければ-1。
・あとで