博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hihocoder-1142-三分求极值
阅读量:4958 次
发布时间:2019-06-12

本文共 1247 字,大约阅读时间需要 4 分钟。

Hihocoder-1142 : 三分·三分求极值

 

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

这一次我们就简单一点了,题目在此:

在直角坐标系中有一条抛物线y=ax^2+bx+c和一个点P(x,y),求点P到抛物线的最短距离d。

 

输入

第1行:5个整数a,b,c,x,y。前三个数构成抛物线的参数,后两个数x,y表示P点坐标。-200≤a,b,c,x,y≤200

输出

第1行:1个实数d,保留3位小数(四舍五入)

样例输入
2 8 2 -2 6
样例输出
2.437

 

 

题解: 

简单的凸函数求解极值的方法,按照要求实现就可以了。 

准备公式: 

(1), 点到直线的距离公式:d=│AXo+BYo+C│ / √(A²+B²)

 

 

#include 
#include
#include
#include
using namespace std; double a, b, c, x, y; double function(double x0){ return sqrt((x0-x)*(x0-x) + (a*x0*x0 + b*x0 + c - y)*(a*x0*x0 + b*x0 + c - y)); }int main(){ freopen("in.txt", "r", stdin); scanf("%lf %lf %lf %lf %lf", &a, &b, &c, &x, &y); if( fabs(a) < 0.000001){ if(fabs(b) < 0.000001){ printf("%.3lf\n", fabs(y-c) ); }else{ printf("%.3lf\n", (b*x - y + c)/(sqrt(b*b + 1)) ); } } else { double lmin, rmin, left = -100000.0, right = 100000.0; while( right-left > 0.0001) { lmin = function( left + (right-left)/3.0 ); rmin = function( right - (right-left)/3.0 ); if(lmin > rmin){ left = left + (right-left)/3.0; } else { right = right - (right-left)/3.0; } } printf("%.3lf\n", lmin); } return 0; }

  

 

转载于:https://www.cnblogs.com/zhang-yd/p/6259285.html

你可能感兴趣的文章
(转)Scrapy 深入一点点
查看>>
荧光激活细胞分选( FACS)
查看>>
传球游戏
查看>>
如何组建和管理测试团队
查看>>
理论相关概念原理
查看>>
本地存储
查看>>
MP3的播放与停止
查看>>
两个周末,两个湖
查看>>
开发环境搭建
查看>>
入门GTD时间管理系统必读
查看>>
Codeforces Round #367 (Div. 2) Vasiliy's Multiset 异或字典树带删除模板
查看>>
牛客(59)按之字形顺序打印二叉树
查看>>
JavaScript 图表库 xCharts
查看>>
随笔 javascript-抽象工厂模式
查看>>
机器学习----人脸对齐的算法-ASM.AAM..CLM.SDM
查看>>
Android项目的目录结构
查看>>
spring-cloud服务器雪崩效应
查看>>
C++中“引用”的底层实现
查看>>
ZOJ 1602. Multiplication Puzzle (DP)
查看>>
Spring Cloud分布式微服务云架构集成项目
查看>>