概述
题目:题目链接
思路:题目让求最下面池子满的时间和所有池子满的时间,首先我们考虑所有池子满的时间,我们从上到下考虑,因为某些池子满了之后溢出只能往下溢水,考虑当前池子如果注满时间最长,那么从第一个池子到当前池子容量之和与流速之和之比是一样的,随着数据读入处理一遍即可得出最大的注满时间,即注满全部池子的时间,接下来我们考虑最下方池子的注满时间,这个时间不会大于单独给这个池子注满的时间,同样的,不会大于给最下方池子和他上面那一个池子一块拿出来后最下方池子的注满时间,反着扫描一遍,就可以得出结果。
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 %.8fn", minans, sumans); 43 } 44 return 0; 45 }
转载于:https://www.cnblogs.com/fan-jiaming/p/9833987.html
最后
以上就是沉静月光为你收集整理的Pond Cascade Gym - 101670B 贪心+数学的全部内容,希望文章能够帮你解决Pond Cascade Gym - 101670B 贪心+数学所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复