#include<stdio.h> #include<math.h> int n,i,cases; double tank[11],pipe[11],h0,dh,V,V0,p,k,sum; double root(double b,double c) { return b/2-sqrt(b*b/4-c); } int main() { k=0.097; while(scanf("%d",&n)&&n) { V=0; for(i=0;i<n;i++) { scanf("%lf",&tank[i]); if(i) V+=tank[i]; } for(i=1;i<n;i++) scanf("%lf",&pipe[i]); V-=pipe[1]; p=1; sum=pipe[1]; for(i=1;i<n;i++) { dh=pipe[i+1]-pipe[i]; if(i<n-1) h0=pipe[i+1] + (p*V/(V-dh)-1)/k; if(h0>tank[0]||i==n-1) { dh=tank[0]-pipe[i]; sum+=root(dh+V+1/k,dh*V+(1-p)*V/k); break; } sum+=dh; p*=V/(V-dh); V-=dh; h0=pipe[i+1] + (p*V/(V-pipe[i+1])-1)/k; if(h0>tank[0]) { sum+=V-V*p/(1+(tank[0]-pipe[i+1])*k); break; } p*=V/(V-pipe[i+1]); V-=tank[i]; V0=tank[i]-pipe[i+1]; dh=tank[0]-pipe[i+1]; sum+=pipe[i+1] + root(dh + V0+1/k, dh*V0 + (1-p)*V0/k); } printf("Case %d: %.3lf\n\n",++cases,sum+tank[0]); } return 0; } |
Double click to view unformatted code.