ABC023 D問題 射撃王
https://scrapbox.io/files/6117a9329a864c001da93197.png
二分探索の問題(~を満たす最大 (最小) の値を求めよ系の問題)
解 x を仮定して可能かを判定する問題に置き換えて
解 x が可能となるような最大 (最小) の x を求める
最も高い場所で割られた風船が得点となる
→高度 x 以下で全ての風船が割れるかどうかの判定問題に持ち込む
制限があれば、風船を割る優先順位が決まる!
これに内容が詳しく載ってます!
https://scrapbox.io/files/6117acf488dd7e001d41373b.jpg
だいたいこうだろうコード *WAあり
code:swift
let N = Int(readLine()!)!
for _ in 0..<N{
let input = readLine()!.split(separator: " ").map{Int($0)!}
}
var left = -1
var right = Int.max //Intの最高数にしたら正解した。。
while(right - left > 1){
let mid = left + (right - left) / 2
var T = Int.init(repeating: 0, count: N) var ok = true
for i in 0..<N{
ok = false
}else{
Ti = (mid - Hi)/Si //Tiは指定の高度に達する時間 つまり この時間が早いほど優先度が高い }
}
T = T.sorted() //タイムリミットが早い順にソート
for j in 0..<N{
ok = false
}
}
if ok{
right = mid
}else{
left = mid
}
}
print(right)