View Code of Problem 1067

#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.


Back to problem 1067