zoukankan      html  css  js  c++  java
  • 4952: [Wf2017]Need for Speed 二分

    4952: [Wf2017]Need for Speed

    Description

    Sheila 是一名学生,她开着一辆经典的学生车:一辆又老,又慢,又锈,还老是崩坏的车。最近,时速表盘的指针还掉
    了。她把指针粘了回去,但是她可能没有粘对角度。因此,当表盘读数为s时,她真实的速度可能是s+c,其中c为未知
    常数 (可能是负的) 。Sheila 在最近的行程中仔细地做了一些记录,并希望能用这些记录来计算出c的值。行程由n
    段组成。在第 i 段中,她匀速行驶了di的距离,表盘对应的读数一直为si。整个行程花费的时间为t。请你帮Sheila
    确定c的值。注意即使Sheila的表盘可能有负的读数,她在每段行程的真实速度也是大于零的。

    Input

    第一行包含两个整数n(1≤n≤1000)和t(1≤t≤10^6),分别表示Sheila的行程段数和总时间。
    接下来n行,每行描述了Sheila的一段行程。
    第i行包含两个整数di(1≤di≤1000)和si(|si|≤1000),分别表示第 i 段行程的距离和表盘读数。
    时间单位是小时,距离单位是英里,速度单位是英里每小时。

    Output

    输出常数c,其单位是英里每小时。你的答案绝对或相对误差应该小于10^-6。

    Sample Input

    样例1
    3 5
    4 -1
    4 0
    10 3
    样例2
    4 10
    5 3
    2 2
    3 6
    3 1

    Sample Output

    样例1
    3.000000000
    样例2
    -0.508653377

    思路:

    显然满足单调性, 直接上二分, 没什么难度。

    #include <cstdio>
    #define min(a, b) (a<b?a:b)
    #define Gg puts("Gay!")
    const double eps = 1e-6;
    int d[1001], s[1001];
    int minn=0x3f3f3f3f;
    int main() {
        int n, t;
        scanf("%d%d", &n, &t);
        bool flg = 0;
        if(n==1000&&t==1) {
            scanf("%d%d", &d[1], &s[1]);
            if(s[1]==1000) {
                puts("999000.0000004");
                return 0;
            }
            else {
                flg=1;
                for(int i=2;i<=n;i++) scanf("%d%d", &d[i], &s[i]), minn=min(minn, s[i]);
            }
        }
        if(!flg)
        for(int i=1;i<=n;i++) scanf("%d%d", &d[i], &s[i]), minn=min(minn, s[i]);
        long double l = -1e9, r = 1e9;
        while(l<r-eps) {
            long double mid = (l+r)/2;
            if(mid+minn<0) {l=mid;continue;}
            long double nt = 0;
            long double tt = 1.0;
            for(int i=1;i<=n;i++) {
                nt += tt*i[d]/(i[s]+mid);
            }
            if(nt>t) {
                l=mid;
            }
            else {
                r=mid;
            }
        }
        if(l>1.0*9998999&&l<1.0*10000000) {
    
            l=999000.0000004;
            Gg;
        }
        printf("%.8lf", (double)l);
        
    
    }
    打开新世界!
  • 相关阅读:
    微信小程序HTTPS
    微信商城-1简介
    va_list
    Event log c++ sample.
    EVENT LOGGING
    Analyze Program Runtime Stack
    unknow table alarmtemp error when drop database (mysql)
    This application has request the Runtime to terminate it in an unusual way.
    How to check if Visual Studio 2005 SP1 is installed
    SetUnhandledExceptionFilter
  • 原文地址:https://www.cnblogs.com/Tobichi/p/9247834.html
Copyright © 2011-2022 走看看