数学,递推。

不知道有没有更加神奇的做法,我是这样想的:

首先,如果多边形完全在$y$轴左侧,那么答案为$\frac{w}{u}$。

剩下的情况就要先判断是否能在车开过之前跑过去,如果跑不过去,要在车慢慢开过$y$轴的时候,一起慢慢跑上去。

那么先来判断是否能在车开过之前跑过去:

如上图所示,如果要在车来车前跑过去,那么等价于要求:对于凸包左侧蓝色链上的每一个点$L[i]$,满足$\frac{{L[i].y}}{u} ≤ \frac{{L[i].x}}{v}$,即人要比点先到。如果有一个点不满足,那么就人就无法在车来前跑过去。如果可以的话,答案为$\frac{w}{u}$。

剩下的情况就是凸包右侧黄色链开过$y$轴时,人同时走上去。这种情况的答案,递推一下就能算出来了,如果人走到$(0,R[i].y)$所花的时间为$ans$,那么人走到$(0,R[i+1].y)$的时间$ans$更新为$\max (ans + \frac{{\left( {R\left[ {i + 1} \right].y-R\left[ i \right].y } \right)}}{u},\frac{{R[i].x}}{v})$,想一想也能想明白吧~

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi=acos(-1.0),eps=1e-8;
void File()
{freopen("D:\\in.txt","r",stdin);freopen("D:\\out.txt","w",stdout);
}const int INF=2000000000;
const int maxn=10010;
int n,w,v,u,len1,len2;
struct X { int x,y; }p[maxn],L[maxn],R[maxn];int main()
{scanf("%d%d%d%d",&n,&w,&v,&u);for(int i=1;i<=n;i++) scanf("%d%d",&p[i].x,&p[i].y);int ymin=INF,ymax=-INF,f,p1,p2; bool flag;for(int i=1;i<=n;i++) ymin=min(ymin,p[i].y), ymax=max(ymax,p[i].y);f=INF; for(int i=1;i<=n;i++) if(p[i].y==ymin&&p[i].x<f) f=p[i].x,p1=i;f=INF; for(int i=1;i<=n;i++) if(p[i].y==ymax&&p[i].x<f) f=p[i].x,p2=i;flag=0; for(int i=p1;i>=1;i--) { L[len1++]=p[i]; if(i==p2) { flag=1; break; } }if(flag==0) for(int i=n;i>=p2;i--) L[len1++]=p[i];f=-INF; for(int i=1;i<=n;i++) if(p[i].y==ymin&&p[i].x>f) f=p[i].x,p2=i;f=-INF; for(int i=1;i<=n;i++) if(p[i].y==ymax&&p[i].x>f) f=p[i].x,p1=i;flag=0; for(int i=p1;i>=1;i--) { R[len2++]=p[i]; if(i==p2) { flag=1; break; } }if(flag==0) for(int i=n;i>=p2;i--) R[len2++]=p[i];for(int i=0;i<len2/2;i++) swap(R[i],R[len2-i-1]);bool fail=0; for(int i=0;i<len1;i++) if((LL)L[i].y*(LL)v>(LL)L[i].x*(LL)u) { fail=1; break; }int xmax=-INF; for(int i=1;i<=n;i++) xmax=max(xmax,p[i].x);if(xmax<=0) fail=0;if(fail==0) printf("%.6lf\n",1.0*w/u);else{double ans=0; int pre=0;for(int i=0;i<len2;i++){ans=ans+1.0*(R[i].y-pre)/u; pre=R[i].y;ans=max(ans,1.0*R[i].x/v);}ans=ans+1.0*(w-pre)/u;printf("%.6lf\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/zufezzt/p/5808421.html

CodeForces 703C Chris and Road相关推荐

  1. CodeForces - 711B Chris and Magic Square

    CodeForces - 711B  Chris and Magic Square   题意:给你一个N*N矩阵,其中0代表未知的那个数,让你在这个位置填上一个数使整个矩阵的 每一行.每一列.主对角线 ...

  2. codeforces 711B - Chris and Magic Square(矩阵0位置填数)

    题目链接:http://codeforces.com/problemset/problem/711/B 题目大意: 输入 n ,输入 n*n 的矩阵,有一个占位 0 , 求得将 0 位置换成其他的整数 ...

  3. CodeForces 543D 树形DP Road Improvement

    题意: 有一颗树,每条边是好边或者是坏边,对于一个节点为x,如果任意一个点到x的路径上的坏边不超过1条,那么这样的方案是合法的,求所有合法的方案数. 对于n个所有可能的x,输出n个答案. 分析: 题解 ...

  4. Codeforces Round #632 (Div. 2) E. Road to 1600 构造好题

    传送门 文章目录 题意: 思路 题意: 直接白嫖 思路 首先不难发现,n≤2n\le2n≤2的时候是无解的. 现在我们来构造n=3n=3n=3的情况,通过打表可以发现如下矩阵是符合题目要求的: 179 ...

  5. Codeforces Round #369 (Div. 2) B. Chris and Magic Square【数学,模拟】

    B. Chris and Magic Square time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  6. 【codeforces 711B】Chris and Magic Square

    [题目链接]:http://codeforces.com/contest/711/problem/B [题意] 让你在矩阵中一个空白的地方填上一个正数; 使得这个矩阵两个对角线上的和; 每一行的和,每 ...

  7. codeforces 721E Road to Home

    题目链接:http://codeforces.com/contest/721/problem/E --------------------------------------------------- ...

  8. Chris and Magic Square CodeForces - 711B

    ZS the Coder and Chris the Baboon arrived at the entrance of Udayland. There is a n × n magic grid o ...

  9. C. Road Optimization codeforces 1625C

    https://codeforces.com/problemset/problem/1625/C 题目大意:在坐标0到l的数轴上,有n个限速点,每个限速点到下一个限速点之间每个单位长度的速度等于限速, ...

最新文章

  1. HDU2665 求区间第K大 主席树
  2. linux改环境语言,linux下改变语言环境
  3. Java命令行界面(第22部分):argparser
  4. 中断共享(硬件角度)
  5. 2.JVM和DVM之间的区别
  6. 简单实现Popup弹出框添加数据
  7. P06: 分组的背包问题
  8. AJPFX分析int 和integer的区别
  9. 关于本次课堂代码的练习
  10. Linux脚本5秒后启动程序,嵌入式Linux启动时间优化的秘密之四-启动脚本
  11. 《视觉SLAM十四讲——从理论到实践》学习笔记
  12. 从零开始学做微信小程序,看这些就够了!
  13. 微信内提示浏览器打开遮罩层
  14. 没有计算机的一天英语作文带翻译,美好的一天糟糕的一天英语作文带翻译
  15. CS5211,CS5212,CS5256,CS5811,CS5288资料
  16. 重装mac系统 未能与恢复服务器取得联系,进入 macOS 系统恢复模式 – 重新安装 macOS 系统...
  17. POC-T批量poc验证工具
  18. 选择排序(Selection sort)是一种简单直观的排序算法
  19. 计算机用户名密码不知道了怎么改,电脑系统账号administrator设置了密码,密码忘记了怎么办?...
  20. 港科喜讯 | 36名香港科大教授获得表彰!

热门文章

  1. Apache Hook机制解析(上)——钩子机制的实现
  2. c# enum 解析
  3. Hyperledger Fabric 超级账本的硬伤
  4. IntelliJ IDEA安装主题详细步骤
  5. 深度学习数学知识(持续补充)
  6. 学习微信小程序之css14浮动的特性
  7. 大型网站应用中MySQL的架构演变史
  8. eclipse开发项目关于内存是如何分配的
  9. 模拟器中文输入法设置
  10. php导出excel数据使用csv替代xls格式