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> # ...
随机推荐
- Java 常用类——StringBuffer&StringBuilder【可变字符序列】
一.字符串拼接问题 由于 String 类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象. Demo: 1 public class StringDemo { 2 pub ...
- linux下redis安装运行教程——redis系列
天没降大任于我,照样苦我心智,劳我筋骨. 安装运行的过程 由于官网太慢,csdn里的资源又要钱,所以呢,只能使用我自己本地以前下载的陈年..哦不,3.xredis安装包 资源已经放到百度云,需要的可以 ...
- 谈谈C++中的数据对齐
对于C/C++程序员来说,掌握数据对齐是很有必要的,因为只有了解了这个概念,才能知道编译器在什么时候会偷偷的塞入一些字节(padding)到我们的结构体(struct/class),也唯有这样我们才能 ...
- GreenDao3.2使用详解(增,删,改,查,升级)
首先看一下效果图: 项目结构如下图所示: 第一步:在build中添加配置如下: projet 目录下的build.gradle dependencies { classpath 'org.greenr ...
- python-实现顺序栈
7 class sqstack(object): 8 def __init__(self,maxsize): 9 self.maxsize = maxsize 10 self.stackElem = ...
- PTA 求链式表的表长
6-1 求链式表的表长 (10 分) 本题要求实现一个函数,求链式表的表长. 函数接口定义: int Length( List L ); 其中List结构定义如下: typedef struct ...
- 攻防世界 reverse hackme
hackme XCTF 3rd-GCTF-2017 __int64 __fastcall sub_400F8E(__int64 a1, __int64 a2) { char input[136]; / ...
- 【vue开发】watch中的immediate与deep的使用
下面是我对于immediate与deep的理解 1.immediate 设置immediate为true后,监听会在被监听值初始化的时候就开始,也就页面上的数据还未变化的时候. 经过测试发现,如果监听 ...
- 「HTML+CSS」--自定义按钮样式【002】
前言 Hello!小伙伴! 首先非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 哈哈 自我介绍一下 昵称:海轰 标签:程序猿一只|C++选手|学生 简介:因C语言结识编程,随后转入计算机 ...
- canvas绘制图像轮廓效果
在2d图形可视化开发中,经常要绘制对象的选中效果. 一般来说,表达对象选中可以使用边框,轮廓或者发光的效果. 发光的效果,可以使用canvas的阴影功能,比较容易实现,此处不在赘述. 绘制边框 绘制 ...