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");}}