zoukankan      html  css  js  c++  java
  • Tinkoff Challenge

    传送门

    题意

    给出一个矩形的左下角和右上角的坐标,给出n个点的初始坐标和运动速度和方向,询问是否存在一个时间使得所有点都在矩形内,有则输出最短时间,否则输出-1

    分析

    对于每个点如果运动过程中都不在矩形内,输出-1
    每个点的横纵运动分开考虑,判断处理得到点到达矩形边界的时间段,取交集,具体见代码

    trick

    1.all the mice that are strictly inside the mousetrap,即在矩形边界点不算入矩形
    2.卡精度

    代码

    #include <bits/stdc++.h>
    using namespace std;
    
    #define ll long long
    #define F(i,a,b) for(int i=a;i<=b;++i)
    #define R(i,a,b) for(int i=a;i<b;++i)
    #define mem(a,b) memset(a,b,sizeof(a))
    #pragma comment(linker, "/STACK:102400000,102400000")
    inline void read(int &x){x=0; char ch=getchar();while(ch<'0') ch=getchar();while(ch>='0'){x=x*10+ch-48; ch=getchar();}}
    
    int n;
    double x1,y1,x2,y2,rx,ry,vx,vy,minn,maxn;
    const double eps = 1e-13;
    bool flag;
    void work(double loc,double v,double l,double r)
    {
        if(fabs(v)<eps)
        {
            if((loc+eps)<=r&&(loc-eps)>=l) return ;
            else { flag=1;return ; }
        }
        if(v<0)
        {
            l=-l,r=-r,v=-v,loc=-loc;
            swap(l,r);
        }
        if(loc>r) { flag=1;return; }
        minn=min(minn,(r-loc)/v);
        if(loc<l) maxn=max(maxn,(l-loc)/v);
    }
    int main()
    {
        scanf("%d",&n);
        scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
        minn=1e9,maxn=0;
        for(int i=1;i<=n;++i)
        {
            scanf("%lf%lf%lf%lf",&rx,&ry,&vx,&vy);
            if(flag) continue;
            work(rx,vx,x1,x2);
            work(ry,vy,y1,y2);
        }
        //printf("minn=%f maxn=%f
    ",minn,maxn);
        if(flag) { puts("-1");return 0; }
        if(maxn+eps<=minn) printf("%f
    ",maxn);else puts("-1");
    }
    
  • 相关阅读:
    使用node-inspector调试nodejs程序<nodejs>
    2015 2月记事(1)
    设置npm安装模块目录<nodejs>
    BZOJ 1965 [AHOI2005]洗牌
    BZOJ 1924 [Sdoi2010]所驼门王的宝藏
    【NOIP2003】传染病控制
    BZOJ [Scoi2015]情报传递
    [Noi2002]Savage
    BZOJ 4025: 二分图
    BZOJ 4999 This Problem Is Too Simple!
  • 原文地址:https://www.cnblogs.com/chendl111/p/6767930.html
Copyright © 2011-2022 走看看