ZONe プログラミングコンテスト ネタバレ 答え
これの答えを書いていきます!よろしくおねがいします!
1問目
rot13をやれと書いてありますね!
"ZONe"という文字列の個数を数えればいいので、pythonであればcount関数が使えそうです!
print(input().count("ZONe"))
というコードで正解できます!
2問目
算数をやれと書いてありますね!
UFOに電波が届かないとき、電波が一個の障害物に当たっていることになります。逆も成り立ちますね!
距離d、高さhの障害物に電波が当たらないようにするためには、少なくとも
H-D(H-h)/(D-d)
以上の高さから電波を発する必要がありますね!
N,D,H=map(int,input().split());res=0
for _ in range(N):d,h=map(int,input().split());res=max(res,H-D*(H-h)/(D-d))
print(res)
というコードで正解できます!
3問目
やれと書いてありますね!
「答えをxにできるか?」という判定問題を考えるのが定石ですね!
2人を既に選んだ時点で、(パワー, スピード, 根性)など、特定の複数のパラメータがチームに足りないとき、足りない部分のパラメータの最小値が最大の人を選ぶのが最適ですね!
ところで、3人目に限らず、ある特定のいくつかのパラメータに絞ってみた時に最適な人をチームに入れるのが正しそうですよね!
そこで、5つのパラメータの任意の組み合わせ31通りについて、各パターンでパラメータの最小値が最大の人を先に選んでおくと、チームはこの31人から3人を選ぶのが良さそうですね!
from itertools import combinations as np
N=int(input())
a=[tuple(map(int,input().split())) for _ in range(N)]
aa=[]
res=0
def plt(x,pd):
res=10**9
for i in range(5):
if i in pd:res=min(res,x[i])
return res
for c in range(1,6):
for pd in np([i for i in range(5)], c):aa.append(max(a,key=lambda x:plt(x,pd)))
for pd in np(aa,3):res=max(res,min([max(pd[0][i],pd[1][i],pd[2][i]) for i in range(5)]))
print(res)
このコードで正解できます!
さいごに
全部解くことができました!いかがでしたか?
ZONeの進化には今後も目が離せませんね!