AtCoder Beginner Contest 138

はい。
https://atcoder.jp/contests/abc138
ooox-- ダメです。

A - Red or Not

PyPy3

a=int(input())
s=input()
print(s if a>=3200 else "red")

3200で分岐判定して出力してます。

B - Resistors in Parallel

PyPy3

import fractions
def gcd(x,y): return fractions.gcd(x,y)
def lcm(a,b): return a*b//fractions.gcd(a,b)
 
n=int(input())
a=[int(i) for i in input().split()]
x=a[0]
for i in range(1,n):
    x=lcm(x,a[i])
ans=chk=0
for i in a:
    ans+=x//i
print(x/ans)

問題文やサンプルのとおりに分母を最小公倍数で揃えて計算してます。

C - Alchemist

PyPy3

n=int(input())
v=[int(i) for i in input().split()]
v.sort()
ans=v[0]
for i in range(1,n):
    ans=(ans+v[i])/2
print(ans)

小さい方から使います。大きい方から使うと割る2され続けるとロスが大きいので小さい方から使います。

D - Ki

TLEでAC出来ず。
頂点aとbでa<bならば、aからbの情報だけにしてbからaの情報は持つ必要ないかな、と思った。
クエリは一旦全て受け取って同じ頂点pからのものは合算していいかな、と思った。
クエリは頂点の番号が大きいものから処理かな、と思った。
番号が若くなっていくと再帰で含まれる全ての頂点に加算処理が必要かな、と思った。
TLEでした。解説を見て後で。