hdu3400 两重三分
题意:
题意给你两个公路 A-B C-D 和三个速度V(ab) V(cd) 和 V(两条公路之间) 问你从A到D的最短时间是多少.
思路:
一开始暴力了其中的一条边,每次加0.01,另一条边用的三分,结果wa掉了,感觉不wa暴力一条边时间上也够呛,后来看了下题解,人家用的是两重三分,就是三分其中一条边,当对于最外层的那个三分的某两个点也就是 mid mmid,我们在三分两次,取得最优,
确实如此,因为后来想了想,对于整体来说,总函数里面有两个未知数,无法确定是他的性质,
但是如果我们分开来想,分成两部分,那么他们就含有凸性(或凹性)了,这样我们就可以三分在短时间内找到精度满足条件的解..
#include<stdio.h>
#include<math.h> #define eps 0.0001
typedef struct
{
double x ,y;
}NODE; NODE A ,B ,C ,D;
double P ,Q ,R; double dis(NODE X ,NODE Y)
{
double tmp = pow(X.x - Y.x ,2.0) + pow(X.y - Y.y ,2.0);
return sqrt(tmp);
} double CD_3F(NODE now)
{
NODE low ,up ,mid ,mmid;
double t1 ,t2;
low = C ,up = D;
while(1)
{
mid.x = (low.x + up.x) / 2;
mid.y = (low.y + up.y) / 2;
t1 = dis(now ,mid) / R + dis(mid ,D) / Q; mmid.x = (mid.x + up.x) / 2;
mmid.y = (mid.y + up.y) / 2;
t2 = dis(now ,mmid) / R + dis(mmid ,D) / Q; if(t1 > t2) low = mid;
else up = mmid; if(dis(low ,up) < eps) break;
}
return t2;
} double AB_3F()
{
NODE low ,up ,mid ,mmid;
low = A ,up = B;
double t1 ,t2;
while(1)
{ //puts("ok");
mid.x = (low.x + up.x) / 2;
mid.y = (low.y + up.y) / 2;
t1 = dis(A ,mid) / P + CD_3F(mid); mmid.x = (mid.x + up.x) / 2;
mmid.y = (mid.y + up.y) / 2;
t2 = dis(A ,mmid) / P + CD_3F(mmid); if(t1 > t2) low = mid;
else up = mmid; if(dis(low ,up) < eps) break;
}
return t1;
} int main ()
{
int t;
scanf("%d" ,&t);
while(t--)
{
scanf("%lf %lf %lf %lf" ,&A.x ,&A.y ,&B.x ,&B.y);
scanf("%lf %lf %lf %lf" ,&C.x ,&C.y ,&D.x ,&D.y);
scanf("%lf %lf %lf" ,&P ,&Q ,&R);
printf("%.2lf\n" ,AB_3F());
}
return 0;
}
hdu3400 两重三分的更多相关文章
- POJ 1475 Pushing Boxes 搜索- 两重BFS
题目地址: http://poj.org/problem?id=1475 两重BFS就行了,第一重是搜索箱子,第二重搜索人能不能到达推箱子的地方. AC代码: #include <iostrea ...
- POJ-2689 Prime Distance (两重筛素数,区间平移)
Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13961 Accepted: 3725 D ...
- 2018/7/31--zznu-oj-问题 G: 方差 普拉斯--【两重暴力循环求方差即可!】
问题 G: 方差 普拉斯 时间限制: 1 Sec 内存限制: 128 MB提交: 94 解决: 17[提交] [状态] [讨论版] [命题人:admin] 题目描述 方差(样本方差)是每个样本值与 ...
- 创业的游戏 明星APP上市前后的冰火两重天
明星APP上市前后的冰火两重天" title="创业的游戏 明星APP上市前后的冰火两重天"> 当下,似乎只有创业才是能够实现笑看风云变幻的那条"黄金通道 ...
- 对logistic回归分析的两重认识
logistic回归,回归给人的直观印象只是要求解一个模型的系数,然后可以预测某个变量的回归值.而logistic回归在应用中多了一层含义,它经常应用于分类中.第一重认识:logistic是给真正的回 ...
- hdu 5104 Primes Problem(prime 将三重循环化两重)
//宁用大量的二维不用量小的三维 #include <iostream> #include<cstdio> #include<cstring> using name ...
- vue实现两重列表集合,点击显示,点击隐藏的折叠效果,(默认显示集合最新一条数据,点击展开,显示集合所有数据)
效果图: 默认显示最新一条数据: 点击显示所有数据: 代码: 说明:这里主要是 这块用来控制显示或者隐藏 根据当前点击的 这个方法里传递的index 对应 isShow 数组里的index ,对 ...
- hdu-3790 最短路径问题---dijkstra两重权值
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3790 题目大意: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到 ...
- HDU3400+三分
三分出两个中间的位置即可. /* 两次三分 */ #include<stdio.h> #include<string.h> #include<stdlib.h> # ...
随机推荐
- Kubernetes - Kubelet TLS Bootstrapping
一.简单说明 写这个的初衷是自己搜索TLS Bootstrapping的时候没有搜到自己想要的东西,因为TLS Bootstrapping经过很多版本之后也发生了一些变化,所以网上很多也是老的内容了. ...
- 让人头疼的AI bug (随想)
虽然概念上,人工智能和机器学习不等同.但是本文提及的AI,指的是基于机器学习的AI. 一个软件产品,出了错误叫bug,bug需要修.那一个机器学习的模型,准确率在那摆着呢,大伙心知肚明是有一定的犯 ...
- SpringMVC-01 什么是SpringMVC
SpringMVC-01 什么是SpringMVC 回顾MVC 1.什么是MVC MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范. 是将业务逻辑 ...
- 【老孟Flutter】Flutter 2.0 重磅更新
老孟导读:昨天期待已久的 Flutter 2.0 终于发布了,Web 端终于提正了,春季期间我发布的一篇文章,其中的一个预测就是 Web 正式发布,已经实现了,还有一个预测是:2021年将是 Flut ...
- Java 常见对象 02
常见对象·String类 Scanner 的概述和方法介绍 * A:Scanner 的概述 * B:Scanner 的构造方法原理 * Scanner(InputStream source) * Sy ...
- 03-Spring默认标签解析
默认标签的解析 上一篇分析了整体的 xml 文件解析,形成 BeanDefinition 并注册到 IOC 容器中,但并没有详细的说明具体的解析,这一篇主要说一下 默认标签的解析,下一篇主要说自定义标 ...
- Python深入:setuptools进阶
作者:gqtcgq 来源:CSDN 原文:https://blog.csdn.net/gqtcgq/article/details/49519685 Setuptools是Python Distuti ...
- pta 简单求和
6-1 简单求和 (10 分) 本题要求实现一个函数,求给定的N个整数的和. 函数接口定义: int Sum ( int List[], int N ); 其中给定整数存放在数组List[]中,正 ...
- 「免费开源」基于Vue和Quasar的前端SPA项目crudapi后台管理系统实战之自定义组件(四)
基于Vue和Quasar的前端SPA项目实战之序列号(四) 回顾 通过上一篇文章 基于Vue和Quasar的前端SPA项目实战之布局菜单(三)的介绍,我们已经完成了布局菜单,本文主要介绍序列号功能的实 ...
- DAOS 分布式异步对象存储|存储模型
概述 DAOS Pool 是分布在 Target 集合上的存储资源预留.分配给每个 Target 上的 Pool 的实际空间称为 Pool Shard. 分配给 Pool 的总空间在创建时确定,后期可 ...