题意
给出v,x,y
求一个最小的t满足 y/(v+x*t) + t 最小
思路
v,x,y都是已知的,那么这个式子可以转化为 m1/(m2+m3*t) + t
比如样例的话实际上就是y=2/x+x,其中x>=0,这是一个凹函数,先下降再上升,可以用三分来求极值
Go代码
package main
import (
"fmt"
)
func main() {
var v, x, y float64
fmt.Scan(&v, &x, &y)
var l, r float64 = 0.0, 1_000_000_000
cul := func(x,y,v, t float64) float64 {
return y/(v+x*t) + t
}
for r-l >= 1e-7 {
tmp := (r - l) / 3.0
mid1, mid2 := l+tmp, l+2*tmp
res1, res2 := cul(x,y, v, mid1), cul(x,y, v, mid2)
if res1 >= res2 {
l = mid1
} else {
r = mid2
}
}
fmt.Println(cul(x,y, v, l))
}

京公网安备 11010502036488号