您的位置:首页 > 其它

ural1753_三分

2011-03-25 02:32 525 查看
/*#include <iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
struct node
{
int y,m,d;
};
struct live
{
node birth,death;
}p[101];
int a[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool leap(int y) //判断润年
{
if(y%400==0||y%4==0&&y%100!=0)
return true;
else
return false;
}
int cal_year(int y)     //从公元元年1月1日到y-1年12月31日的天数
{
int i,count=0;
for(i=0;i<y;i++)
if(leap(i))
count++;
return 365*y+count;
}
int cal_month(node q)   //从1月1日到q.m月q.d日的天数
{
int i;
int ans=0;
for(i=1;i<q.m;i++)
ans+=a[i];
ans+=q.d;
return ans;
}
int cal_date(node q)      //从元年1月1日到某一年的天数
{
if(q.m==1||q.m==2&&q.d<=29)
return cal_year(q.y)+cal_month(q);
else
{
if(leap(q.y))
{
return cal_year(q.y)+cal_month(q)+1;
}
else
return cal_year(q.y)+cal_month(q);
}
}
char s[100];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i;
for(i=1;i<=n;i++)
scanf("%d.%d.%d %s %d.%d.%d",&p[i].birth.d,&p[i].birth.m,&p[i].birth.y,s,&p[i].death.d,&p[i].death.m,&p[i].death.y);
int max=0,index=1,temp;
for(i=1;i<=n;i++)
{
temp=cal_date(p[i].death)-cal_date(p[i].birth);
if(max<temp)
{
max=temp;
index=i;
}
}
printf("%d/n",index);
}
return 0;
}
*/
#include <iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const double eps=1e-6;
double h,H,l;
double cal(double x)
{
return x*(H/2.0)/sqrt(x*x+h*h)-x;
}
int main()
{
while(scanf("%lf%lf%lf",&h,&H,&l)!=EOF) //数据太弱,l不起作用,如果l太小的话还要考虑特殊情况
{
double m,mm,left=0.000001,right=sqrt(H*H/4.0-h*h); //left不能为0,涉及到精度问题
double ans1,ans2;
while(fabs(left-right)>eps)
{
m=(left+right)/2.0;
mm=(left+m)/2.0;
ans1=cal(m);
ans2=cal(mm);
if(ans1>ans2)
left=mm;
else
right=m;
}
printf("%.6lf/n",ans1);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: