zoukankan      html  css  js  c++  java
  • Codeforces 703C Chris and Road 二分、思考

    题目:http://codeforces.com/contest/703/problem/C

    题意:
    这里写图片描述

    一个人从(0,0,)到(0,w)速度最快是u。
    一个凸多边形的物体(有n个顶点)与人同时开始移动,问人在不被撞的前提下最快到达(0,w)的时间?

    分析:

    人不被车撞,有两种情况,第一种是车在到达x=0时,人就已经过去了,这种情况特殊判断一下即可。第二种情况是人如果一直走可鞥会被车撞,要想不被车撞就是等车上的点都走到x=0左边的时候再过。要花费时间最少,那么二分即可,二分保证车的所有顶点到x=0花费的时间不大于人到该点花费的时间(也就是说人到该点时,车上的点都走到了x=0的左边,这样就不会撞人了)。

    #include<bits/stdc++.h>
    using namespace std;
    typedef double db;
    #define x first
    #define y second
    typedef pair<double,double>pdd;
    const int N=1e5+9;
    pdd p[N];
    int n;
    double u,v,w;
    bool check()
    {
        for(int i=0;i<n;i++){
            if(p[i].x/v<p[i].y/u)return 0;
        }
        return 1;
    }
    bool ok(double x)
    {
        for(int i=0;i<n;i++){
            if(p[i].x/v>p[i].y/u+x)return 0;
        }
        return 1;
    }
    int main()
    {
        scanf("%d%lf%lf%lf",&n,&w,&v,&u);
        for(int i=0;i<n;i++)scanf("%lf%lf",&p[i].x,&p[i].y);
        if(check())printf("%.12lf
    ",w/u);
        else{
            double l=0,r=2e9;
            while(r-l>1e-9){
                double m=(l+r)/2;
                if(ok(m))r=m;
                else l=m;
            }
            printf("%.12lf
    ",w/u+(l+r)/2);
        }
        return 0;
    }
    

    cf大牛的解法,跟上边我说的思想是一样的,要保证人到某点时,车走到x=0左边:

    void solve() {
        int i,j,k,l,r,x,y; string s;
    
        cin>>N>>W>>V>>U;
        FOR(i,N) cin>>X[i]>>Y[i];
        X[N]=X[0];
        Y[N]=Y[0];
        int up=0,down=0;
        FOR(i,N) {
            if(Y[i]*V-X[i]*U>0) up++;
            if(Y[i]*V-X[i]*U<0) down++;
        }
    
        if(up==0 || down==0) return _P("%.12lf
    ",W/1.0/U);
        double ma=0;
        FOR(i,N) if(X[i]>=0) ma=max(ma,max(X[i]*1.0/V,Y[i]*1.0/U) + (W-Y[i])*1.0/U);
        _P("%.12lf
    ",ma);
    }
    
  • 相关阅读:
    C语言inline函数(转)
    C++ 输入ctrl+z 不能再使用cin的问题
    VMware无法识别USB设备
    python manage.py 命令
    求二叉树的最小深度
    Vim的分屏功能(转)
    一些Python的惯用法和小技巧:Pythonic
    Docker(十五)-Docker的数据管理(volume/bind mount/tmpfs)
    Docker(十四)-Docker四种网络模式
    Docker(十三)-Docker save and load镜像保存
  • 原文地址:https://www.cnblogs.com/01world/p/5762812.html
Copyright © 2011-2022 走看看