1294 倒水问题
来源:互联网 发布:新时代软件下载 编辑:程序博客网 时间:2024/05/29 12:19
有n 个水桶排成一排(编号1~n),每个水桶都有一个最大容量(单位为升),每个水桶的水只能往两边的水桶里倒(编号相邻的水桶)。要使所有水桶里的水都一样多,至少需要倒多少水(单位为升)。
- 输入
第一行一个正整数T,表示有T组测试数据。
对于每组测试数据,第一行一个整数n (n<=10000) 表示有n 个水桶,第二行有n 个整数表示水桶的容积,第三行有n 个整数表示水桶中当前的水量。
- 输出
对于每组测试数据:输出一行,至少需要倒多少水(单位为升),保留2位小数。如果无法使所有水桶水量相等则输出-1。
- 样例输入
2
4
4 4 4 4
1 2 3 4
5
6 4 2 5 7
5 2 1 3 4
- 样例输出
5.00
-1
此题是一道模拟题,只需要求出平均值,然后相邻的桶之间互相倒水即可
#include <stdio.h>#include <string.h>main(){int number,te;int n;int i;double sum;double count; double a[10000];double b[10000]; int flag;scanf("%d",&number);for(te=1;te<=number;te++){ sum=0;scanf("%d",&n);for(i=0;i<n;i++)scanf("%lf",&b[i]);for(i=0;i<n;i++){scanf("%lf",&a[i]); sum+=a[i];} sum=sum/n;flag=1;for(i=0;i<n;i++){if(sum>b[i]){flag=0; break;}elsecontinue;} count=0;if(flag==1){for(i=0;i<n-1;i++){if(a[i]<=sum){a[i+1]=a[i+1]-(sum-a[i]); count+=sum-a[i];}if(a[i]>sum){a[i+1]=a[i+1]+(a[i]-sum);count+=a[i]-sum;}}printf("%.2lf\n",count);}if(flag==0)printf("-1\n");}}
- 1294 倒水问题
- 倒水问题
- 倒水问题
- 倒水问题
- 倒水问题
- 倒水问题
- 倒水问题
- 倒水问题
- 倒水问题
- 倒水问题
- 倒水问题
- 倒水问题
- 倒水问题
- 倒水问题
- 倒水问题
- 倒水问题
- 倒水问题
- 倒水问题
- SHELL [正则表达式][grep][tr]
- 我做的小小聊天器,java swing实现
- 1291 快斗的烦恼
- 1292 奥运倒计时
- 1293 格雷码
- 1294 倒水问题
- Linux下高并发socket最大连接数所受的各种限制
- const 迭代器和const 迭代型
- 1295 快乐的YK
- SQL求昨天的时间
- 1297 特别的幸运数
- 1298 删数问题
- 基于linuxsuse10安装db2 8.2.4
- Windows Server 2003不填注释项就能关机