12.喷水装置(二)

时间:2015-03-06 17:24:47   收藏:0   阅读:250
//	12	4	喷水装置(二)
#include <stdio.h>
#include <math.h>
int main()
{
	int n1,n,w,h,x[10000],r[10000];
	int i,j,k,temp,result;
	double xx,max;
	scanf("%d",&n1);
	getchar();
	while(n1--)
	{
		scanf("%d%d%d",&n,&w,&h);
		getchar();
		for(i=0;i<n;i++)
		{
			scanf("%d%d",&x[i],&r[i]);
			getchar();
		}
		
		//对所有喷水装置按坐标位置由近到远排序
		for(i=0;i<n-1;i++)
		{
			k=i;
			for(j=i+1;j<n;j++)
			{
				if(x[j]<x[k])
					k=j;
			}
			if(k!=i)
			{
				temp=x[i];
				x[i]=x[k];
				x[k]=temp;
				temp=r[i];
				r[i]=r[k];
				r[k]=temp;
			}
		}
		
		//计算最少使用多少喷水装置
		xx=0;
		result=0;
		k=-1;
	    while(xx<w)
		{
			for(i=k+1,max=0;i<n;i++)
			{
				if( (r[i]*r[i])-(h*h/4)>=((x[i]-xx)*(x[i]-xx)) && (x[i]+sqrt(r[i]*r[i]-h*h/4))>max )
				{
					max=x[i]+sqrt(r[i]*r[i]-h*h/4);
					k=i;
				}
			}
			xx=max;
			result++;
			if(0==xx)
			{
				result=0;
				break;
			}
		}
		printf("%d\n",result);
		
	}
	return 0;
}


原文:http://anglecode.blog.51cto.com/5628271/1617859

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!