Kyrieh Girls 2007-2008 » 日志 » 三分啊三分
三分啊三分
P.H. 发表于 2007-09-29 21:54:31
Ray’s Magic Ball
http://acm.nuaa.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1117虽然我好弱小的,但积分还是记得的……
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
const double eps = 1e-8;
const double pi = acos(-1.0);
double R, M, ru, lb, rb, m1, m2;
inline int dcmp(double x) {
return x < -eps ? -1 : x > eps;
}
inline double calc(double h)
{
double A, B;
if(dcmp(h - R) < 0) {
A = M * R + pi * ru * (2.0 / 3 * R * h * h * h - 1.0 / 4 * h * h * h * h);
B = M + pi * ru * (R * h * h - 1.0 / 3 * h * h * h);
}
else {
A = M * R + 5.0 / 12 * pi * ru * R * R * R * R;
B = M + 2.0 / 3 * pi * ru * R * R * R;
h -= R;
A += pi * ru * (R * R * R * h + R * R * h * h / 2 - R * h * h * h / 3 - h * h * h * h / 4);
B += pi * ru * (R * R * h - h * h * h / 3);
}
return A / B;
}
int main()
{
while(3 == scanf("%lf%lf%lf", &R, &M, &ru)) {
for(lb = 0, rb = R; dcmp(lb - rb) < 0; ) {
m1 = lb + (rb - lb) / 3;
m2 = m1 + (rb - lb) / 3;
double t1 = calc(m1);
double t2 = calc(m2);
if(dcmp(t1 - t2) < 0) rb = m2;
else lb = m1;
}
printf("%.2lf\n", m1);
}
return 0;
}
相关日志:
收藏:
QQ书签
del.icio.us
订阅:
Google
抓虾
