zoukankan      html  css  js  c++  java
  • Pond Cascade Gym

    题目:题目链接

    思路:题目让求最下面池子满的时间和所有池子满的时间,首先我们考虑所有池子满的时间,我们从上到下考虑,因为某些池子满了之后溢出只能往下溢水,考虑当前池子如果注满时间最长,那么从第一个池子到当前池子容量之和与流速之和之比是一样的,随着数据读入处理一遍即可得出最大的注满时间,即注满全部池子的时间,接下来我们考虑最下方池子的注满时间,这个时间不会大于单独给这个池子注满的时间,同样的,不会大于给最下方池子和他上面那一个池子一块拿出来后最下方池子的注满时间,反着扫描一遍,就可以得出结果。

    AC代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cmath>
     5 #include <algorithm>
     6 #include <cstring>
     7 #include <vector>
     8 #include <string>
     9 #include <queue>
    10 #include <map>
    11 #include <set>
    12 
    13 #define FRER() freopen("in.txt", "r", stdin);
    14 #define INF 0x3f3f3f3f
    15 
    16 using namespace std;
    17 
    18 int main()
    19 {
    20     //FRER()
    21     int n, num[100005];
    22     double m, minans, sumans, sum, sumv;
    23     while(~scanf("%d %lf", &n, &m)) {
    24         scanf("%d", &num[0]);
    25         sum = 1.0 * num[0];
    26         sumv = m;
    27         sumans = sum / sumv;
    28         for(int i = 1; i < n; ++i) {
    29             scanf("%d", &num[i]);
    30             sum += 1.0 * num[i];
    31             sumv += m;
    32             sumans = max(sumans, sum / sumv);
    33         }
    34         sum = 1.0 * num[n - 1];
    35         sumv = m;
    36         minans = sum / sumv;
    37         for(int i = n - 2; ~i; --i) {
    38             sum += 1.0 * num[i];
    39             sumv += m;
    40             minans = min(minans, sum / sumv);
    41         }
    42         printf("%.8f %.8f
    ", minans, sumans);
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    智能指针的理解
    [转] weak_ptr解决shared_ptr环状引用所引起的内存泄漏
    模板实现多态的功能
    Protobuf的自动反射消息类型的方法
    [转] C++临时变量的生命周期
    C++转换函数
    [转] boost------ref的使用(Boost程序库完全开发指南)读书笔记
    c++回调编程本质
    New 和 GetMem 的不同之处
    Delphi New,Getmem,ReallocMem联系与区别
  • 原文地址:https://www.cnblogs.com/fan-jiaming/p/9833987.html
Copyright © 2011-2022 走看看