A. Wizards and Trolleybuses (物理模拟题)

原题地址:http://codeforces.com/problemset/problem/167/A

题意: 有n辆车,车的加速度为a,他们都要从起点开到终点,起点终点距离为d第i辆车的发车时间是t[i],最大速度是v[i]

保证,不能超车,问你每辆车到达终点的时间是多少

思路:物理模拟题,判断在到达终点的时候速度是否达到最大值,分情况讨论即可

#include <bits/stdc++.h>
#include <cmath>
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
#include <stack>
#include <set>
#include <map>
#include <cctype>
#define eps 1e-8
#define INF 0x3f3f3f3f
#define MOD 1e9+7
#define PI acos(-1)
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define CLR(x,y) memset((x),y,sizeof(x))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int seed = 99959;
const int maxn = 2e5 + 5;
double ans[maxn];
double n, a, d;
double t, v;

int main() {
    scanf("%lf%lf%lf", &n, &a, &d);
    for(int i = 1; i <= n; i++) {
        scanf("%lf%lf", &t, &v);
        if(v * v >= 2 * a * d) {
            ans[i] = sqrt(2 * d / a) + t;
        } else {
            double tmp = v * v / 2 / a;
            double x = tmp;
            tmp = d - tmp;
            ans[i] = tmp / v + sqrt(2 * x / a) + t;
        }
    }
    for(int i = 2; i <= n; i++) {
        ans[i] = max(ans[i], ans[i - 1]);
    }
    for(int i = 1; i <= n; i++) printf("%.7f\n", ans[i]);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/yiqzq/article/details/81559597
今日推荐