记录编号 48841 评测结果 AAAAAAAAAA
题目名称 [Nescafé29] 穿越七色虹 最终得分 100
用户昵称 GravatarTruth.Cirno 是否通过 通过
代码语言 C++ 运行时间 0.015 s
提交时间 2012-11-06 18:48:36 内存使用 3.15 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;

int main(void)
{
	freopen("rainbow.in","r",stdin);
	freopen("rainbow.out","w",stdout);
	int i,j,k;
	double h,h2,x0,x[7],r[7],cross[16],left=0,mid=50000,right=100000,leftt=0,midt=0,rightt=0,xx,temp;
	bool ok,in;
	cin>>h>>x0;
	h2=h*h;
	for (i=0;i<7;i++)
		cin>>x[i]>>r[i];
	cross[14]=0;
	cross[15]=x0;
	while (left<=right)
	{
		if (left==leftt&&right==rightt&&mid==midt)
			break;
		leftt=left;
		rightt=right;
		midt=mid;
		ok=true;
		for (i=0;i<7;i++)
		{
			temp=pow(r[i]+mid,2.0)-h2;
			if (temp>=0)
				temp=sqrt(temp);
			else
				temp=-1;
			if (temp>=0)
			{
				cross[i]=x[i]+temp;
				cross[i+7]=x[i]-temp;
			}
			else
			{
				cross[i]=0;
				cross[i+7]=0;
			}
		}
		for (i=0;ok&&i<16;i++)
			for (j=i;ok&&j<16;j++)
			{
				if ((i!=14&&cross[i]==0)||(j!=14&&cross[j]==0))
					continue;
				if (i!=j)
					xx=(cross[i]+cross[j])/2;
				else
					xx=cross[i];
				if (xx>=0&&xx<=x0)
				{
					in=false;
					for (k=0;k<7;k++)
					{
						if (pow(xx-x[k],2.0)+h2<=pow(r[k]+mid,2.0))
						{
							in=true;
							break;
						}
					}
					if (!in)
						ok=false;
				}
			}
		if (ok)
			right=mid;
		else
			left=mid;
		mid=(left+right)/2;
	}
	printf("%.2lf\n",mid);
	return(0);
}