| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
二分法WA的弟兄可以试试这个办法。。。。我AC前也WA了7 8次了。。。。
大家可以试试这个方法:在xoy平面上一个很小矩形区域内的函数图像上做二分求根,因为范围太小所以精度容易出错。。。大家可以把图像做拉伸变换。。。。即在原式里另x=x'/B,y=y'/B。。。B为很大的一个正数。。。这样图像被拉大了。。。在新图上做二分求零点x'。。。然后除以B求x,这样精度会好一点。。。。
#include<iostream>
#include<cmath>
using namespace std;
long double l,n,c;
const long double e=1e-10;
const long double b=1e5;
long double co;
long double f1(long double sita)
{
return b*co*sin(sita/b);
}
long double f2(long double sita)
{
return sita;
}
long double getsita(long double l,long double r)
{
if(r-l<=e) return (r+l)/2;
long double mid=(l+r)/2;
if(f1(mid)>f2(mid)) return getsita(mid,r);
return getsita(l,mid);
}
long double ans()
{
return l/2*tan(getsita(e,acos((long double)-1)*b/2)/2/b);
}
int main()
{
while(scanf("%lf%lf%lf",&l,&n,&c)&&l>=-1*e)
{
co=1+n*c;
printf("%.3lf\n",ans());
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator