UVA 12457
来源:互联网 发布:java集合类详解和使用 编辑:程序博客网 时间:2024/05/16 18:29
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3919
——————————————————————————————————————
题目描述:
这题就是要求椭圆周长。
——————————————————————————————————————
题目思路:
1、积分+龙贝格积分加速(我的方法,代码比较长)
这题看到以后,我很邪恶的百度了一下椭圆周长计算方法。得到一个积分公式。
但是由于本题对精度要求很高,至少到小数点后6位。这样积分时的ds就要很小,这就使得程序会tle。
此时脑海中刹那闪过了数值分析里学的积分加速。
于是翻课件,找出来龙贝格公式,于是,就过了。。(有点点邪恶,至此我才发现计算方法的重要作用)
2、(代码见下,待探究)
——————————————————————————————————————
题目细节:
学会了pi的几种求法:
1、pi=acos(-1.0)
2、pi=(4.0*atan(1.0))
(本方法的原理待探究)
——————————————————————————————————————
源代码1:
#include <iostream>#include<stdio.h>#include<math.h>using namespace std;#define Pi 3.1415926535898#define ds 0.0000005#define M 40double a = 0,b = 0;double f(double si){ return sqrt(1-((a*a-b*b)/(a*a))*sin(si)*sin(si));}long Sq(int k){ long m = 1; for(;k>0;k--) m*=2; return m;}double rom(double a,double b,double e){ double T[M],S[M],C[M],R[M],y; int k = 0,i; double h = (b-a)*1.0; T[1] = h/2.0*(f(a)+f(b)); h /=2.0; for(k=1;k<=M;k++,h/=2) { y=0; for(i=1;i<=Sq(k-1);i++) { y+=f(a+(2*i-1)*h); } T[Sq(k)]=T[Sq(k-1)]/2.0+h*y; S[Sq(k-1)]=4.0/3*T[Sq(k)]-1.0/3*T[Sq(k-1)]; if(k-2>=0) C[Sq(k-2)]=16.0/15*S[Sq(k-1)]-1.0/15*S[Sq(k-2)]; if(k-3>=0) R[Sq(k-3)]=64.0/63*C[Sq(k-2)]-1.0/63*C[Sq(k-3)]; if(k-4>=0){ if(fabs(R[Sq(k-3)]-R[Sq(k-4)])<e) break;} } return R[Sq(k-3)];}int main(){ int t = 0,k = 0; double ans = 0; scanf("%d",&t); for(k = 1;k<=t;k++) { scanf("%lf %lf",&b,&a); ans = 4*a*rom(Pi/2,0,ds); printf("Case %d: %.6lf\n",k,fabs(ans)); } return 0;}
源代码2:
#include<stdio.h>#include<string.h>#include<math.h>const double pi=(4.0*atan(1.0));double a,b;int main(){ int i,j,T,cas=0; scanf("%d",&T); while(T--){ scanf("%lf%lf",&b,&a); double e=1.0-(b*b)/(a*a); double sum=1.0,tmp=1.0; for(i=1;i<100000;i++){ double r=(2.0*i-1)/(2.0*i); sum-=(tmp*=r*r*e)/(2.0*i-1); } printf("Case %d: %.8f\n",++cas,2.0*pi*a*sum); } return 0;}
- UVA 12457
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- 开源中国 4 周年, Android、iPhone、WP7三个平台客户端全面开源
- ted演讲:用计算机教孩子真正的数学:math != calculating——有感
- paip.提升用户体验----记住用户名与自动登录
- 开发过程中工程的热发布(修改xml属性)
- Linux的环境变量的设置
- UVA 12457
- fdisk 和 df 命令
- flaot型与0比较问题
- 黑马程序员-- HTML 之设置颜色
- Android的进程,线程模型
- PRD
- sqldeveloper启动时报Unable to create an instance of the Java Virtual Machine Located at path: ..\..\jdk\
- Linux 到现在还是没有线程呀?
- UVA 10420 战利品列表