记录编号 |
61505 |
评测结果 |
AAAAAAAAAA |
题目名称 |
饥饿的母牛 |
最终得分 |
100 |
用户昵称 |
cstdio |
是否通过 |
通过 |
代码语言 |
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;
}