AtCoder Beginner Contest 123

はい。 https://atcoder.jp/contests/abc123
ooox 957(-19)でした。

A - Five Antennas

Python3

d=[]
for i in range(5):
    a=int(input())
    d.append(a)
k=int(input())
print("Yay!" if k>=d[-1]-d[0] else ":(")

最も離れている両端のアンテナが通信できれば全てのアンテナが通信できる。問題文をよく読んだり、kより大きいとかに気をつければ大丈夫だと思う。

B - Five Dishes

Python3

ans=chk=0
d=[]
for i in range(5):
    x=int(input())
    if x%10:
        d.append((x%10,x))
    else:
        ans+=x
d.sort(reverse=True)
for i in d:
    ans+=((i[1]+10)//10)*10
if len(d): ans-=10-d[-1][1]%10
 
print(ans)

無駄な待ち時間がないように10の倍数のものを優先して消化する。端数があるものはmod10で余りが大きい物を優先して消化して、小さいものを最後に残す。サンプル2を見てそうなっているし、調理時間が1分のお皿と9分のお皿のどっちが早く出てくるかを考えてもそうなるはず。

C - Five Transportations

Python

n=int(input())
d=[]
ans=0
for i in range(5):
    x=int(input())
    d.append(x)
print(5+(n-1)//min(d))

最小値が重要そうな気がしながらかなり悩んだ。サンプル3からなんとか気づいて式を立ててACした。でもまぁ終わってみれば確かにA-Eで最小のものしか解答に影響しないですね。例えば
・A>Bの場合は、Aがどんなペースで人数を運んできても常にBは満員で運ぶ状態になる。
・A<Bの場合は、Aがどんなペースで人数を運んできても常にBは定員以下で運ぶ状態になる。
待ち時間や運行回数などを考える必要がないので人数とA-Eの最小だけで解答が決まると思う。あと提出したものでは、 print(5+(n-1)//min(d)) と書いているが、解説の式のほうが正しい考え方のような気がしますね。

D - Cake 123

Python3

x,y,z,k=map(int,input().split())
a=[int(i) for i in input().split()]
b=[int(i) for i in input().split()]
c=[int(i) for i in input().split()]
a.sort(reverse=True)
b.sort(reverse=True)
c.sort(reverse=True)
if k<x: a=a[:k]
if k<y: b=b[:k]
if k<z: c=c[:k]
d=[]
ans=[]
for i in a:
    for j in b:
        d.append(i+j)
d.sort(reverse=True)
if k<len(d): d=d[:k]
for i in c:
    for j in d:
        ans.append(i+j)
ans.sort(reverse=True)
for i in range(k):
    print(ans[i])

a,bを逆順でソートしてk個以内でそれぞれの組合せを計算して、それをまたk個以内だけとcのk個以内との組合せを計算してソレの上位k個を解にしました。でも解説にもっときちんとした高速な方法が書いてありますね。