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;
    }
    
  • 相关阅读:
    css盒模型
    css构造块级元素
    后台数据能刷新,前台页面显示不刷新问题
    java的代理和动态代理简单测试
    基于Maven的S2SH(Struts2+Spring+Hibernate)框架搭建
    SSH框架中配置log4j的方法
    Spring声明式事务配置管理方法
    Hibernate关联关系配置(一对多、一对一和多对多)
    java递归和反向递归
    Java实现几种常见排序方法
  • 原文地址:https://www.cnblogs.com/czhui666/p/13732211.html
Copyright © 2011-2022 走看看