zoukankan      html  css  js  c++  java
  • 0922考试T1 乱搞

    0925考试T1

    ​ 题目大意:

    ​ 有一个数轴,数轴上有(n + 1)艘船,给你每艘船的距离数轴上终点的距离,船身的长度和船的速度,问第1艘船(距离终点最远的那一艘)最少需要多长时间可以到终点,后面的船不可以超越前面的。

    ​ 我觉得应该算是思维题吧,正解并没有什么算法。

    ​ 这道题难的地方就在于每艘船速度不同,后面的船不可以超过前面的船,最多就是与前面的船速度相同,顶在前面的船的船尾。还有,假设某一艘船过了终点,但是它并不会消失,还会堵着后面的船。

    ​ 我们考虑,当第一个船经过终点的时候,它肯定会与前面若干个(或没有)船连在一起,也就是说影响时间的只是那一艘堵在最前面较慢的那一艘船,后面的船都紧贴这它。我们枚举每一艘船作为堵在前面的那一艘船,假设当前船为(x),那么后面的所有船都跟在(x)的后面,我们可以把这些船看做一个大船,那么这艘大船的长度就是这些船的长度相加。这个大船的长度(-)第一艘船的长度(+)(x)这艘船距终点的距离就是第一艘船走的路程,(x)的速度就是第一艘船的速度,这样可以算出一个时间。我们把枚举的所有船的时间取个最大值就是最后答案。

    #include <bits/stdc++.h>
    
    using namespace std;
    
    inline double read() {
        double s = 0, f = 1; char ch;
        while(!isdigit(ch = getchar())) (ch == '-') && (f = -f);
        for(s = ch ^ 48;isdigit(ch = getchar()); s = (s * 10) + (ch ^ 48));
        return s * f;
    }
    
    const int N = 1e6 + 5;
    int T, n;
    double ans, sum;
    struct boat { double l, x, v; } a[N];
    
    int main() {
    
        T = read();
        while(T --> 0) {
            n = read(); n++;
            for(int i = 1;i <= n; i++) a[i].l = read();
            for(int i = 1;i <= n; i++) a[i].x = read();
            for(int i = 1;i <= n; i++) a[i].v = read();
            ans = sum = 0;
            for(int i = 1;i <= n; i++) {
                if(i != 1) sum += a[i].l;
                double t = (a[i].x + sum) / a[i].v;
                ans = max(ans, t);
            }
            printf("%.10lf
    ", ans);
        }
    
        fclose(stdin); fclose(stdout);
        return 0;
    }
    
  • 相关阅读:
    年轻人绝对不懂的人际关系经验
    MRCPv2在电信智能语音识别业务中的应用
    S3 介绍
    RGW 学习 前言
    CEPH 自动化测试用例介绍
    CentOS7使用yum安装ceph rpm包
    Placement_pools on Rados-GW
    ceph log机制
    bucket list 函数解析
    ceph 初始化函数解析
  • 原文地址:https://www.cnblogs.com/czhui666/p/13732211.html
Copyright © 2011-2022 走看看