zoukankan      html  css  js  c++  java
  • CodeForces 782B The Meeting Place Cannot Be Changed (二分)

    题意:题意:给出n个人的在x轴的位置和最大速度,求n个人相遇的最短时间。

    析:二分时间,然后求并集,注意精度,不然会超时。

    代码如下:

    #pragma comment(linker, "/STACK:1024000000,1024000000")
    #include <cstdio>
    #include <string>
    #include <cstdlib>
    #include <cmath>
    #include <iostream>
    #include <cstring>
    #include <set>
    #include <queue>
    #include <algorithm>
    #include <vector>
    #include <map>
    #include <cctype>
    #include <cmath>
    #include <stack>
    #include <sstream>
    #define debug() puts("++++");
    #define gcd(a, b) __gcd(a, b)
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define freopenr freopen("in.txt", "r", stdin)
    #define freopenw freopen("out.txt", "w", stdout)
    using namespace std;
    
    typedef long long LL;
    typedef unsigned long long ULL;
    typedef pair<int, int> P;
    const int INF = 0x3f3f3f3f;
    const LL LNF = 1e17;
    const double inf = 0x3f3f3f3f3f3f;
    const double PI = acos(-1.0);
    const double eps = 1e-7;
    const int maxn = 60000 + 5;
    const int mod = 1000000007;
    const int dr[] = {-1, 0, 1, 0};
    const int dc[] = {0, 1, 0, -1};
    const char *de[] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
    int n, m;
    const int mon[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    const int monn[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    inline bool is_in(int r, int c){
      return r >= 0 && r < n && c >= 0 && c < m;
    }
    
    struct Node{
      double x, v;
    };
    Node a[maxn];
    
    
    bool judge(double m){
      double l = a[0].x-a[0].v*m, r = a[0].x+a[0].v*m;
      for(int i = 1; i < n; ++i){
        l = max(l, a[i].x-a[i].v*m);
        r = min(r, a[i].x+a[i].v*m);
        if(r < l)  return false;
      }
      return r >= l;
    }
    
    int main(){
      scanf("%d", &n);
      for(int i = 0; i < n; ++i){
        scanf("%lf", &a[i].x);
      }
      for(int i = 0; i < n; ++i){
        scanf("%lf", &a[i].v);
      }
      double l = 0.0, r = 1e9;
      while(r - l > eps){
        double m = (l + r) / 2.0;
        if(judge(m))  r = m;
        else  l = m;
      }
      printf("%.6f
    ", l);
      return 0;
    }
    

      

  • 相关阅读:
    python 并发编程 多线程 event
    python 并发编程 多线程 定时器
    python 并发编程 多线程 信号量
    linux top 查看CPU命令
    python 并发编程 多线程 GIL与多线程
    python 并发编程 多线程 死锁现象与递归锁
    python 并发编程 多线程 GIL与Lock
    python GIL全局解释器锁与互斥锁 目录
    python 并发编程 多线程 GIL全局解释器锁基本概念
    执行python程序 出现三部曲
  • 原文地址:https://www.cnblogs.com/dwtfukgv/p/7119638.html
Copyright © 2011-2022 走看看