游游开车出游 | Go 三分

游游开车出游

https://www.nowcoder.com/practice/667369e08b2f498c89a935df0af921b3

题意

给出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))
}

#牛客创作赏金赛#
15天大厂真题带刷Go题解 文章被收录于专栏

15天大厂真题带刷Golang题解

全部评论

相关推荐

zhiyog:哈哈哈,其实是津巴布韦币
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务