码迷,mamicode.com
首页 > 其他好文 > 详细

vijos p1433——火炬手之梦

时间:2016-11-09 22:09:20      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:print   sha   点距   shared   争夺   codeblock   container   color   bit   

描述

十八居士做的第4个梦是成为了一名火炬手。恰巧奥组委还有最后一个火炬手的名额,于是各路高手群雄逐鹿争夺这个名额,clever的十八居士过五关斩六将,与另一高手会师决赛。裁判把他们带到一个神秘密码门前,只要谁先打开这个门,门里的祥云火炬就属于谁。只见密码门上写着一个提示:“密码:f(x)=sqrt((x+a)^2+b)+sqrt((x+c)^2+d)的最小值。”两人面面相觑,怎么做啊这?于是十八居士找到了会编程的你,请你帮他解决问题。

输入:a,b,c,d四个常数(b,d为完全平方数,0<a、b、c、d<=10000)

输出:f(x)的最小值(保留3位小数)。

样例1

样例输入1

1 1 3 4
注:即f(x)=sqrt((x+1)^2+1)+sqrt((x+3)^2+4)

样例输出1

3.606
注:但x=-5/3时,f(x)=sqrt(13)

可以发现密码其实就是两点距离公式表达的,可以得出是(x,0)到(-a,-sqrt(b))和(-c,sqrt(d))的距离和

因为a、b、c、d都是大于0的可以得出这个距离和其实就是这两个点的距离(因为过这两个点的直线交y轴与(m,0),m一定在这两点之间)

直接用两点距离公式。

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     int a,b,c,d;
 6     scanf("%d%d%d%d",&a,&b,&c,&d);
 7     double k1=-a,k2=-sqrt(b);
 8     double k3=-c,k4=sqrt(d);
 9     double ans=sqrt((k1-k3)*(k1-k3)+(k2-k4)*(k2-k4));
10     printf("%.3f",ans);
11     return 0;
12 }

vijos p1433——火炬手之梦

标签:print   sha   点距   shared   争夺   codeblock   container   color   bit   

原文地址:http://www.cnblogs.com/937337156Zhang/p/6048888.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!