【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$且经过的点只被经过一次. 那么我们建出原图的圆方 ...
随机推荐
- ThinkPHP之中getlist方法实现数据搜索功能
自己在ThinkPHP之中的model之中书写getlist方法,其实所谓的搜索功能无非就是数据库查询之中用到的like %string%,或者其他的 字段名=特定值,这些sql语句拼接在and语句 ...
- php ajax提交post请求出现数组被截断情况的解决方法
一.场景 今天做保存专题商品列表的时候发现,前端明明有2300多条数据,但是实际服务端接受存入数据库才166条 二.解决过程 经过调试发现前端页面提交post请求时数据量是正确的,但到服务端只能接受到 ...
- jquery中的mouseenter实现理解
说在前面:首先说一下两者之间的区别,假设当前元素为element,mouseover事件具有冒泡特性,也就是说无论鼠标是从别的元素移动到element或者是从element的子元素移动到element ...
- 一个ListView中显示不同的item(分组)
MainActivity: package com.zzw.qqgroup; import java.util.ArrayList; import java.util.HashMap; import ...
- 添加常驻Notification
private static final int NOTIFICATION_ID=250; //用来标示notification,通过notificatinomanager来发布同样标示的notifi ...
- 异步导出excel
最近看园里有几篇写有关导出导入excel的博客,我正好最近在项目中也有涉及想来一起分享一下,正好整理一下自己的思路. 一.异步的方式是通过iframe来实现,代码如下: if ($('#downloa ...
- SSD1306驱动的OLED实验
[转]http://bbs.21ic.com/icview-434543-1-1.html 前面几章的实例,均没涉及到液晶显示,这一章,我们将向大家介绍OLED的使用.在本章中,我们将使用战舰STM3 ...
- 小白学jquery Mobile《构建跨平台APP:jQuery Mobile移动应用实战》连载四(场景切换)
作为一款真正有使用价值的应用,首先应该至少有两个页面,通过页面的切换来实现更多的交互.比如手机人人网,打开以后先是进入登录页面,登录后会有新鲜事,然后拉开左边的面板,能看到相册.悄悄话.应用之类的其他 ...
- [terry笔记]ArchiveLog归档日志激增解决思路
归档日志激增的危害是巨大的,最严重的结果就是数据库无法正常工作,导致整个系统无法正常工作,其次就算数据库可以正常工作,但激增的归档会对磁盘产生大量消耗,导致性能下降. 归档日志激增一般是因 ...
- 如何解决android studio 运行时中文乱码的问题
相信很多朋友都会遇到android studio 在MAC OS中运行的时候中文乱码.而在代码编辑的时候正常.经过几天的不断寻找解决办法,终于解决了 比如: Toast.makeText(MainAc ...