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");
    }
    
  • 相关阅读:
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 133 克隆图
  • 原文地址:https://www.cnblogs.com/chendl111/p/6767930.html
Copyright © 2011-2022 走看看