hdu 5060 War
来源:互联网 发布:西安项目数据分析公司 编辑:程序博客网 时间:2024/06/13 17:25
War
Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 98 Accepted Submission(s): 28
Special Judge
Problem Description
Long long ago there are two countrys in the universe. Each country haves its own manor in 3-dimension space. Country A's manor occupys x^2+y^2+z^2<=R^2. Country B's manor occupys x^2+y^2<=HR^2 && |z|<=HZ. There may be a war between them. The occurrence of a war have a certain probability.
We calculate the probability as follow steps.
1. VC=volume of insection manor of A and B.
2. VU=volume of union manor of A and B.
3. probability=VC/VU
We calculate the probability as follow steps.
1. VC=volume of insection manor of A and B.
2. VU=volume of union manor of A and B.
3. probability=VC/VU
Input
Multi test cases(about 1000000). Each case contain one line. The first line contains three integers R,HR,HZ. Process to end of file.
[Technical Specification]
0< R,HR,HZ<=100
[Technical Specification]
0< R,HR,HZ<=100
Output
For each case,output the probability of the war which happens between A and B. The answer should accurate to six decimal places.
Sample Input
1 1 12 1 1
Sample Output
0.6666670.187500
Source
BestCoder Round #12
题解及代码:
这道题的意思很简单:给定中心重合的一个球和一个圆柱,求出其重合体积占所有体积的比例。
这题写起来很麻烦,因为要分成5类分别写(可耻de把官方的图扣下来 = =!)
分类大致就是分成这5类,积分的方式这里使用的是simpson积分法,只要知道被积函数和上下限就可以了,不用自己做不定积分。
#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>#include <map>using namespace std;const double pi=3.14159265358979,eps=1e-7;double r,hr,hz;double f(double n){ return pi*(r*r-n*n);}double simpson(double a,double b){ return (b-a)/6.0*(f(a)+4*f((a+b)/2.0)+f(b));}double cal(double a,double b){ double sum=simpson(a,b),mid=(a+b)/2.0; double t=simpson(a,mid)+simpson(mid,b); if(fabs(t-sum)<eps) return sum; return cal(a,mid)+cal(mid,b);}int main(){ while(scanf("%lf%lf%lf",&r,&hr,&hz)!=EOF) { double v=0,hv=0; if(hr>=r&&hz>=r) { v=4.0/3.0*pi*r*r*r; hv=2*pi*hr*hr*hz; printf("%.6lf\n",v/hv); continue; } if(hr>=r&&hz<r) { v=4.0/3.0*pi*r*r*r; double t=2*cal(hz,r); hv=2*pi*hr*hr*hz; printf("%.6lf\n",(v-t)/(hv+t)); continue; } if(r*r>=hr*hr+hz*hz) { v=4.0/3.0*pi*r*r*r; hv=2*pi*hr*hr*hz; printf("%.6lf\n",hv/v); continue; } if(hr<r&&hz>=r) { v=4.0/3.0*pi*r*r*r; double t=2*cal(sqrt(r*r-hr*hr),r)+2*sqrt(r*r-hr*hr)*pi*hr*hr; hv=2*pi*hr*hr*hz; printf("%.6lf\n",t/(hv+v-t)); continue; } v=4.0/3.0*pi*r*r*r; hv=2*pi*hr*hr*hz; double t=2*cal(sqrt(r*r-hr*hr),hz)+2*sqrt(r*r-hr*hr)*pi*hr*hr; printf("%.6lf\n",t/(hv+v-t)); } return 0;}
1 0
- hdu 5060 War
- hdu 5060——War
- hdu -War
- HDU 5060/BC 12C War
- HDU 4070 Phage War
- Hdu 3599 War
- hdu 3345 War Chess
- hdu 4070 Phage War
- hdu——War
- HDU 2600 War
- War hdu 2600
- hdu 2600 War
- HDU 4070 Phage War
- hdu 2600 War
- hdu 2600 war
- HDU 4005 The war
- HDU 4822 Tri-war
- hdu 3345 war chess
- 公安部打拐办明确儿童失踪立即立案
- 深入理解javascript原型和闭包(5)——instanceof
- vs2012下配置opencv2.4.9
- 【鸟哥的linux私房菜】学习笔记5
- HTML解析利器HtmlAgilityPack
- hdu 5060 War
- Reflected Cross Site Scripting (XSS)
- Maven插件开发
- 折半查找
- CSU 1374 Restore Calculation(数位dp)
- 找出字符串中第一个只出现一次的字符——来自华为OJ平台测试基础篇
- String.Empty、string=”” 和null的区别
- Linux sqlite3基本命令
- 32位16位8位寄存器及编号