记录编号 61505 评测结果 AAAAAAAAAA
题目名称 饥饿的母牛 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 0.003 s
提交时间 2013-06-11 11:35:58 内存使用 0.31 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
const double pi=3.14159265359;
void work(void){
	double L,D,S;//农舍长度,木桩到中点距离,绳子长度
	scanf("%lf%lf%lf",&L,&D,&S);
	double L2=L/2;
	double hy=sqrt(D*D+L2*L2);
	double alpha,beta,gamma;
	double sum=0;//吃草面积
	if(D>=S){
		sum=S*S*pi;
		printf("%.2lf\n",sum);
		return;
	}
	if(S<=hy){
		hy=S;
		L2=sqrt(S*S-D*D);
		alpha=asin(L2/hy);
		sum+=S*S*pi*(2*pi-2*alpha)/(2*pi);//"视界"以内的面积
		sum+=L2*D;
		printf("%.2lf\n",sum);
		return;
	}
	alpha=asin(L2/hy);
	sum+=S*S*pi*(2*pi-2*alpha)/(2*pi);//"视界"以内的面积
	sum+=L2*D;
	beta=pi-(pi/2-alpha);
	double r=S-hy;
	sum+=2*r*r*pi*beta/(2*pi);
	if(r>L2){
		double rti=0,arc=0;
		double k=sqrt(r*r-L2*L2);
		gamma=asin(k/r);
		rti=k*L2;
		arc=2*r*r*pi*gamma/(2*pi);
		double temp=arc-rti;
		sum-=temp;
	}
	printf("%.2lf\n",sum);
}
int main(){
	freopen("hungry.in","r",stdin);
	freopen("hungry.out","w",stdout);
	int T,i;
	scanf("%d",&T);
	for(i=1;i<=T;i++) work();
	return 0;
}