【BZOJ】1857: [Scoi2010]传送带(三分)
http://www.lydsy.com/JudgeOnline/problem.php?id=1857
好神奇的三分。。
第一次写三分啊sad。。看了题解啊题解QAQ
首先发现无论怎么走一定是在AB和CD上选了两个点然后走的(包括ABCD四个点),所以我们就是要找出这两个点就行了。
且AB上有且只有一个最优点,而每一个AB上的点也对应CD唯一一个最优点orz。
所以我们三分AB上的点(酷炫但是不知道为啥这是个单峰函数orz),然后对应三分CD上的点(这个比前面的好证。。这个初中就学了的吧。sad)然后就行了。。
距离和费用就是三段的和。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define read(a) a=getint()
#define print(a) printf("%d", a)
#define dbg(x) cout << (#x) << " = " << (x) << endl
#define printarr2(a, b, c) for1(_, 1, b) { for1(__, 1, c) cout << a[_][__]; cout << endl; }
#define printarr1(a, b) for1(_, 1, b) cout << a[_] << '\t'; cout << endl
inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
inline const int max(const int &a, const int &b) { return a>b?a:b; }
inline const int min(const int &a, const int &b) { return a<b?a:b; } const double eps=1e-3;
int ax, ay, bx, by, cx, cy, dx, dy;
double P, Q, R;
double dis(double x1, double y1, double x2, double y2) { return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); }
double cal(double x, double y) {
double x1, x2, y1, y2, lx=cx, ly=cy, rx=dx, ry=dy;
while(abs(rx-lx)>eps || abs(ry-ly)>eps) {
x1=lx+(rx-lx)/3; y1=ly+(ry-ly)/3;
x2=lx+(rx-lx)/3*2; y2=ly+(ry-ly)/3*2;
double d1=dis(x1, y1, x, y)/R+dis(x1, y1, dx, dy)/Q;
double d2=dis(x2, y2, x, y)/R+dis(x2, y2, dx, dy)/Q;
if(d1<d2) rx=x2, ry=y2;
else lx=x1, ly=y1;
}
return dis(x, y, ax, ay)/P+dis(lx, ly, x, y)/R+dis(lx, ly, dx, dy)/Q;
}
int main() {
cin >> ax >> ay >> bx >> by >> cx >> cy >> dx >> dy >> P >> Q >> R;
double x1, x2, y1, y2, lx=ax, ly=ay, rx=bx, ry=by;
while(abs(rx-lx)>eps || abs(ry-ly)>eps) {
x1=lx+(rx-lx)/3; y1=ly+(ry-ly)/3;
x2=rx-(rx-lx)/3; y2=ry-(ry-ly)/3;
double d1=cal(x1, y1), d2=cal(x2, y2);
if(d1<d2) rx=x2, ry=y2;
else lx=x1, ly=y1;
}
printf("%.2lf", cal(lx, ly));
return 0;
}
Description
Input
Output
Sample Input
100 0 100 100
2 2 1
Sample Output
HINT
对于100%的数据,1<= Ax,Ay,Bx,By,Cx,Cy,Dx,Dy<=1000
1<=P,Q,R<=10
Source
【BZOJ】1857: [Scoi2010]传送带(三分)的更多相关文章
- bzoj 1857: [Scoi2010]传送带 三分
题目链接 1857: [Scoi2010]传送带 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 934 Solved: 501[Submit][Stat ...
- Bzoj 1857: [Scoi2010]传送带(三分套三分)
1857: [Scoi2010]传送带 Time Limit: 1 Sec Memory Limit: 64 MB Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段 ...
- BZOJ 1857: [Scoi2010]传送带
二次联通门 : BZOJ 1857: [Scoi2010]传送带 /* BZOJ 1857: [Scoi2010]传送带 三分套三分 可能是吧..dalao们都说明显是一个单峰函数 可是我证不出来.. ...
- BZOJ 1857: [Scoi2010]传送带(三分套三分)
Time Limit: 1 Sec Memory Limit: 64 MB Submit: 2549 Solved: 1370 [Submit][Status][Discuss] Descriptio ...
- 【BZOJ1857】[Scoi2010]传送带 三分套三分
[BZOJ1857][Scoi2010]传送带 Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度 ...
- BZOJ 2131 [scoi2010] 传送带
@(BZOJ)[三分法] Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段. 两条传送带分别为线段AB和线段CD. lxhgww在AB上的移动速度为P,在CD上的移 ...
- 洛谷P2571 [SCOI2010]传送带 [三分]
题目传送门 传送带 题目描述 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移 ...
- bzoj1857: [Scoi2010]传送带--三分套三分
三分套三分模板 貌似只要是单峰函数就可以用三分求解 #include<stdio.h> #include<string.h> #include<algorithm> ...
- [BZOJ1857][SCOI2010]传送带-[三分]
Description 传送门 Solution 三分套三分.代码简单但是证明苦兮兮.. 假如我们在AB上选了一个点G,求到该点到D的最小时间. 图中b与CD垂直.设目前从G到D所耗时间最短的路径为G ...
随机推荐
- 有道单词导入 有道单词 生词本 批量导入 添加 有道单词XML 背单词
本程序 主要功能: 对有道生词实现批量导入功能 生成有道单词XML的功能,实现快速导入 有了本程序后就可以批量添加生词. 有道生词本 XML模板 分析 word 为单词,可以为一个单词 ...
- LoadRunner录制: 选择协议
LR录制的时候关心的是通信,关心的是客户端和服务器之间的数据包.它通过监控客户端和服务器之间的通信,转化为自己的函数. 协议选择错误,可能会导致录制下来的内容为空. 方法一:根据经验来选择协议 Web ...
- vue -model
1. v-model:监听表单(input,textarea,selector)value. 2. label不知道你有没有这样的体验,我明明没有点用户名输入框,而仅仅是点了“用户名”三个字,然后就直 ...
- Spring IOC、对象依赖关系
Spring IOC.对象依赖关系 2016-09-21 01:36 414人阅读 评论(0) 收藏 举报 本文章已收录于: 版权声明:本文为博主原创文章,未经博主允许不得转载. 引入 Strut ...
- AngularJS路由设置方法
Module.config(['$routeProvider', function($routeProvider) { $routeProvider .when('/mall-home', { tem ...
- Intellij idea 快键键
1.快速进入实现类: Command + Alt+B 2.全局查找: Shift + Shift 3.类继承关系: Ctrl + H 4.在继承层次上跳转则用 Command + B / Comman ...
- 03-spring学习-自动装配
自动装配 新建person类: package com.spring.bean.autowire; public class Person { private String name; private ...
- 02-spring学习-配置bean
在spring的IOC容器中配置Bean 一,在xml中通过bean节点来配置bean: class:bean的类名,通过反射的方式在IOC容器中创建Bean,所以要求bean中必须有无参的构造器 i ...
- 创建了几个String对象?
String str = "a"; 1个,在常量池中创建了一个字符串对象. String str = new String("a"); 2个,在常量池中创建了一 ...
- iTunes 无法添加 iPhone 自定义铃声
本篇文章由:http://xinpure.com/itunes-unable-to-add-iphone-custom-ringtones/ 新版本 iTunes 需要在 菜单栏 -> 文件 中 ...