首页 > 代码库 > Acdream 1234 Two Cylinders 自适应辛普森
Acdream 1234 Two Cylinders 自适应辛普森
题目链接:点击打开链接
给定r1,r2
表示2个圆柱体的半径
这两个圆柱体高是正无穷,互相垂直,问相交的最大面积
#include <stdio.h> #include <string.h> #include <iostream> #include <cmath> #define M 410 #define inf 0x3f3f3f3f const double eps = 1e-8; template <class T> inline bool rd(T &ret) { char c; int sgn; if(c=getchar(),c==EOF) return 0; while(c!='-'&&(c<'0'||c>'9')) c=getchar(); sgn=(c=='-')?-1:1; ret=(c=='-')?0:(c-'0'); while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0'); ret*=sgn; return 1; } template <class T> inline void pt(T x) { if (x <0) { putchar('-'); x = -x; } if(x>9) pt(x/10); putchar(x%10+'0'); } using namespace std; double a, R, r; double F(double x){ return sqrt(R*R-x*x) * sqrt(r*r-x*x); } double simpson(double a, double b){ double c = a + (b-a)/2.0; return (F(a) +4*F(c) + F(b)) * (b-a) / 6.0; } double asr(double a, double b, double eps, double A){ double c = a + (b-a) / 2.0; double L = simpson(a, c), R = simpson(c, b); if(fabs(L+R-A) <= 15*eps) return L+R+(L+R-A)/15.0; return asr(a, c, eps/2.0, L) + asr(c, b, eps/2.0, R); } double asr(double a, double b, double eps){ return asr(a, b, eps, simpson(a,b)); } double solve(){ return asr(0, r, eps); } int main(){ while(cin>>R>>r){ if(r>R)swap(r,R); printf("%.4f\n", solve() * 8.0); } return 0; } /* 2 3 2 0 3 2 1 1 3 0 3 2 0 2 3 0 1 0 1 2 1 0 2 1 0 0 2 0 */
Acdream 1234 Two Cylinders 自适应辛普森
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。