【BZOJ】【2765】【JLOI2010】铁人双项比赛
计算几何/半平面交
本来我是想去写POJ 1755的,然后想起了这道跟它很像的题,但应该是弱化版,所以就先写了这个……
我们可以发现每个人的总用时,与k是呈一次函数关系的:$time_i=\frac{k}{Vrun_i}+\frac{S-k}{Vride_i}$
然而我们要找的是某个k,使得$min(time_n-time_i)$最大
那么就是一个线性规划问题了……这个也可以用半平面交来做……(蒟蒻并不会单纯形)
下面的部分为了偷懒简洁我就用$a_i$和$b_i$来代替两种速度……
我一开始想的做法是:维护一个$y=(\frac{1}{a_i}-\frac{1}{b_i})*x+\frac{S}{b_i}$的最小值(上凸壳?),然后由于线性分段函数的极值一定在分界点处取到(BZOJ 1038 瞭望塔),所以可以枚举分界点计算答案。
然而不会写……后来膜拜了lyd神犇的代码,发现:
这题$n\leq 100$,所以找到可能成为分界点的点,即所有直线的交点,暴力更新答案就好了……
然后还有一个地方是将不等式重新变形了一下,将第n条直线直接减到前面n-1条直线中……
无限ym……
/**************************************************************
Problem: 2765
User: Tunix
Language: C++
Result: Accepted
Time:40 ms
Memory:1276 kb
****************************************************************/ //BZOJ 2765
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<iomanip>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std; const int N=;
/*******************template********************/
typedef long double lf;
#define eps 1e-12
int n,num;
lf a[N],b[N],c[N],d[N],S,anst,ansk; void calc(lf k){
lf t=1e100;
F(i,,n-) t=min(t,k*c[i]+d[i]);
if (t>anst) anst=t,ansk=k;
} int main(){
#ifndef ONLINE_JUDGE
freopen("2765.in","r",stdin);
// freopen("2765.out","w",stdout);
#endif
cin >>S>>n;
F(i,,n) cin >> a[i] >> b[i];
F(i,,n-){
c[i]=/a[i]-/b[i]-/a[n]+/b[n];
d[i]=S/b[i]-S/b[n];
} anst=-1e100;
F(i,,n-) F(j,i+,n-){
if (fabs(c[i]-c[j])<eps) continue;
lf k=(d[j]-d[i])/(c[i]-c[j]);
if (k<eps || k>S-eps) continue;
calc(k);
}
calc(); calc(S);
anst*=;
if (anst<-eps) puts("NO");
else{
if (anst<eps) anst=;
cout<<setprecision()<<fixed<<ansk<<' '<<S-ansk<<' ';
cout<<setprecision()<<fixed<<anst<<endl;
}
return ;
}
2765: [JLOI2010]铁人双项比赛
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 477 Solved: 117
[Submit][Status][Discuss]
Description
人双项比赛是吉林教育学院的一项传统体育项目。该项目比赛由长跑和骑自行车组成,参赛选手必须先完成k公里的长跑,然后完成r公里的骑车,才能到达终点。
每个参赛选手所擅长的项目不同,有的擅长长跑,有的擅长骑车。如果总赛程s=k+r一定,那么K越大,对擅长长跑的选手越有利;k越小,对擅长骑车的选手
越有利。
Input
Output
Sample Input
10.0 40.0
20.0 30.0
15.0 35.0
Sample Output
HINT
Source
【BZOJ】【2765】【JLOI2010】铁人双项比赛的更多相关文章
- bzoj2765[JLOI2010]铁人双项比赛
题意:铁人双项比赛由长跑和骑自行车组成,参赛选手必须先完成k公里的长跑,然后完成r公里的骑车,才能到达终点.参赛选手有的擅长长跑,有的擅长骑车. 如果总赛程s=k+r一定,那么K越大,对擅长长跑的选手 ...
- bzoj2765 铁人双项比赛
Description 铁人双项比赛是吉林教育学院的一项传统体育项目.该项目比赛由长跑和骑自行车组成,参赛选手必须先完成k公里的长跑,然后完成r公里的骑车,才能到达终点.每个参赛选手所擅长的项目不同, ...
- 【APIO2018】铁人两项(圆方树,动态规划)
[APIO2018]铁人两项(圆方树,动态规划) 题面 UOJ 洛谷 BZOJ 题解 嘤嘤嘤,APIO的时候把一个组合数写成阶乘了,然后这题的70多分没拿到 首先一棵树是很容易做的,随意指定起点终点就 ...
- 【刷题】LOJ 2587 「APIO2018」铁人两项
题目描述 比特镇的路网由 \(m\) 条双向道路连接的 \(n\) 个交叉路口组成. 最近,比特镇获得了一场铁人两项锦标赛的主办权.这场比赛共有两段赛程:选手先完成一段长跑赛程,然后骑自行车完成第二段 ...
- [Luogu4630][APIO2018]Duathlon 铁人两项
luogu 题目描述 比特镇的路网由 \(m\) 条双向道路连接的 \(n\) 个交叉路口组成. 最近,比特镇获得了一场铁人两项锦标赛的主办权.这场比赛共有两段赛程:选手先完成一段长跑赛程,然后骑自行 ...
- [APIO2018] Duathlon 铁人两项 圆方树,DP
[APIO2018] Duathlon 铁人两项 LG传送门 圆方树+简单DP. 不会圆方树的话可以看看我的另一篇文章. 考虑暴力怎么写,枚举两个点,答案加上两个点之间的点的个数. 看到题面中的一句话 ...
- [APIO2018]铁人两项 --- 圆方树
[APIO2018] 铁人两项 题目大意: 给定一张图,问有多少三元组(a,b,c)(a,b,c 互不相等)满足存在一条点不重复的以a为起点,经过b,终点为c的路径 如果你不会圆方树 ------- ...
- [APIO2018]铁人两项 [圆方树模板]
把这个图缩成圆方树,把方点的权值设成-1,圆点的权值设成点双的size,算 经过这个点的路径的数量*这个点的点权 的和即是答案. #include <iostream> #include ...
- [APIO2018]铁人两项——圆方树+树形DP
题目链接: [APIO2018]铁人两项 对于点双连通分量有一个性质:在同一个点双里的三个点$a,b,c$,一定存在一条从$a$到$c$的路径经过$b$且经过的点只被经过一次. 那么我们建出原图的圆方 ...
随机推荐
- mariadb主从复制架构学习笔记
复制功用: 数据分布 负载均衡:读操作,适用于读密集型的应用 备份 高可用和故障切换 MySQL升级测试 在从服务器上有两个线程: I/O线程:从master请求二进制日志信息,并保存至中继日志 SQ ...
- Hadoop在win7下部署的问题
问题: 为了测试方便所以在win7下部署了伪分布式hadoop运行环境,但是部署结束后在命令行运行hadoop命令创建一个用户文件目录时出现了一下情况: 系统找不到指定的批标签- make_comma ...
- Mac 安装 Tomcat
默认mac已经安装好java jdk-----/Library/Java/JavaVirtualMachines 1. http://tomcat.apache.org/download-70.cgi ...
- Ubuntu10.10的网络配置
有一阵子着实对Ubuntu的网络配置很迷惑,耐下心来仔细上网找了找,有点小心得,总结一下. 先说下大概的配置过程,再去细究一些情况. 一.配置大概分三类:通过配置文件配置.通过命令配置.通过图形化的网 ...
- JS预览图像
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...
- 安装Google框架服务并突破Google Play下载限制
请注明出处:http://www.cnblogs.com/killerlegend/p/3546235.html Written By KillerLegend 关于谷歌服务框架以及安装 安装前请先获 ...
- linux设备驱动层次
USB 采用树形拓扑结构,主机侧和设备侧的USB 控制器分别称为主机控制器(HostController)和USB 设备控制器(UDC),每条总线上只有一个主机控制器,负责协调主机和设备间的通信,而设 ...
- Python核心编程--学习笔记--8--条件与循环
本章讲述if.while.for以及与他们搭配的else.elif.break.continue.pass等语句. 1 if语句 语法:三部分——关键字if.条件表达式.代码块.(记住冒号) if c ...
- Python学习教程(learning Python)--2.3.4Python函数返回值
本节讨论Python函数返回值问题. Python和C语言一样,也可以在函数结束时返回一个值.但在定义自己的Python函数时,是不需要指定返回值数据类型的,这和Python不关心变量的数据类型是一致 ...
- kettle删除资源库中的转换或者作业
在资源库中新建转换,作业都很简单,那么加入现在不需要其中某个转换或者作业该怎么办呢? 下图是已经存在的转换跟作业 现在需要删除aa这个转换 操作步骤如下: 1.工具----资源库----探索资源库 出 ...