E.球的体积并

题意

求两个球的体积并

做法

用球缺公式+计算几何模板即可解决。
球缺公式为:V=πh2(3r−h)3V=\frac{\pi h^2\left( 3r-h \right)}{3}V=3πh2(3r−h)​
其中rrr是球的半径,hhh是球缺的高。
代码

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
const int maxn = 1e5+5;
typedef double db;
const db PI = acos(-1);
const db eps = 1e-10;
int sgn(double x)
{if(fabs(x)<eps) return 0;if(x<0) return -1;else return 1;
}
typedef struct point
{double x,y,z;point() { } point(double a, double b,double c) { x = a; y = b; z = c; }point operator -(const point &b)const { return point(x - b.x, y - b.y,z-b.z); }point operator +(const point &b)const { return point(x + b.x, y + b.y,z+b.z); }//数乘计算point operator *(const double &k)const {  return point(x * k, y * k,z*k); }point operator /(const double &k)const {  return point(x / k, y / k,z/k); }double operator *(const point &b)const {  return x*b.x + y*b.y+z*b.z; }
}point;
double dist(point p1, point p2) { return sqrt((p1 - p2)*(p1 - p2)); }
struct sphere
{double r;point centre;
}sc[maxn];
void SphereInterVS(sphere a, sphere b,double &v)
{double d = dist(a.centre, b.centre);if(sgn(d-a.r-b.r)>=0)//相离{v=0.0;return ;}else if(sgn(d-fabs(a.r-b.r))<=0)//内含{if(sgn(a.r-b.r)<=0) v=4.0*PI*a.r*a.r*a.r/3.0;else v=4.0*PI*b.r*b.r*b.r/3.0;return ;}//球心距double t = (d*d + a.r*a.r - b.r*b.r) / (2.0 * d);//h1=h2,球冠的高double h = sqrt((a.r*a.r) - (t*t)) * 2;double angle_a = 2 * acos((a.r*a.r + d*d - b.r*b.r) / (2.0 * a.r*d)); //余弦公式计算r1对应圆心角,弧度double angle_b = 2 * acos((b.r*b.r + d*d - a.r*a.r) / (2.0 * b.r*d)); //余弦公式计算r2对应圆心角,弧度double l1 = ((a.r*a.r - b.r*b.r) / d + d) / 2;double l2 = d - l1;double x1 = a.r - l1, x2 = b.r - l2;//分别为两个球缺的高度double v1 = PI*x1*x1*(a.r - x1 / 3);//相交部分r1圆所对应的球缺部分体积double v2 = PI*x2*x2*(b.r - x2 / 3);//相交部分r2圆所对应的球缺部分体积v = v1 + v2;//相交部分体积return ;}
int main()
{double ans=0;double x,y,z;scanf("%lf%lf%lf%lf",&x,&y,&z,&sc[1].r);point p =point(x,y,z);sc[1].centre=p;scanf("%lf%lf%lf%lf",&x,&y,&z,&sc[2].r);point p2 =point(x,y,z);sc[2].centre=p2;ans=ans+4.0/3*PI*sc[1].r*sc[1].r*sc[1].r;ans=ans+4.0/3*PI*sc[2].r*sc[2].r*sc[2].r;double v=0.0;SphereInterVS(sc[1],sc[2],v);ans=ans-v;printf("%.10f\n",ans);return 0;
}

【牛客练习赛41 E.球的体积并】球的体积并模板相关推荐

  1. 解题报告(一)C、(牛客练习赛41 F)简单数学题(数论 + FWT)(3.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  2. 牛客练习赛41 b 666RPG (01背包)

    时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 在欧美,"666"是个令人 ...

  3. 牛客练习赛41 D.最小相似度(思维+bfs)

    传送门 给定nnn个长mmm位的二进制串 求一个二进制串TTT,定义valival_ivali​是TTT与第iii个二进制串相同的位数 使得max(val1,val2....valn)max(val_ ...

  4. 牛客练习赛50 F.tokitsukaze and Another Protoss and Zerg(分治+NTT)(模板题)

    题目 在n场1v1中,假设第i场,有ai个星灵单位,和bi个虫族单位. tokitsukaze可以在一场1v1中,任选一种种族进行游戏. 如果选择了星灵,那么在这场游戏中,可以选择出兵1到ai个单位. ...

  5. 牛客练习赛68 B.牛牛的算术

    牛客练习赛68 B.牛牛的算术 题目链接 题目描述 牛牛最近学习了取模是什么 于是他看到了下面这一道题: 多次询问:每次询问包含一个正整数 n 要求你输出下列结果 ∏i=1n∑j=1i∑k=1ji×j ...

  6. 牛客练习赛58 C.矩阵消除游戏

    牛客练习赛58 C.矩阵消除游戏 题目链接 题目描述 牛妹在玩一个名为矩阵消除的游戏,矩阵的大小是n行m列,第i行第j列的单元格的权值为ai,ja_{i,j}ai,j​ ,牛妹可以进行k个回合的游戏, ...

  7. 牛客练习赛81 E. 小 Q 与函数求和 1( “简单莫比乌斯反演” ,欧拉函数性质)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 牛客练习赛81 E. 小 Q 与函数求和 1( "简单莫比乌斯反演" ) Prob ...

  8. 牛客练习赛34 E little w and Digital Root(数位dp)

    title: 牛客练习赛34 E little w and Digital Root(数位dp) date: 2018-12-17 22:38:37 tags: 数位dp categories:ACM ...

  9. 牛客练习赛34 - C little w and Segment Coverage(思维、树状数组)

    title: 牛客练习赛34 - C little w and Segment Coverage(思维.树状数组) date: 2018-12-15 16:36:55 tags: [树状数组,思维] ...

  10. 牛客练习赛52 | C | [烹饪] (DP,裴蜀定理,gcd)

    牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...

最新文章

  1. Centos7 安装 telnet 服务
  2. IJMS:牧医所奶业创新团队在瘤胃微生物新型脲酶抑制剂开发方面取得新进展
  3. 国务院学位委员会关于授予具有研究生毕业同等学力人员硕士、博士学位的规定
  4. dx9 lock unlock效率太低_巧用“动作经济原则”,员工不累,效率加倍!
  5. 电脑退出全屏按哪个键_电脑键盘上的F1到F12,每一个都是快捷键大家都会用到...
  6. c++(和opencv)如何把局部变量变成全局变量的功能
  7. redis查看key的过期时间_面试官:Redis过期后key是怎么样清理的?
  8. 埃氏筛 线性筛(欧拉筛) 算法解析
  9. mysql快速部署主从复制
  10. 线程 -- ThreadLocal
  11. java影院座位订票代码_基于jsp的影院订票-JavaEE实现影院订票 - java项目源码
  12. php 代码坦克,HTML5实现经典坦克大战坦克乱走还能发出一个子弹_html5教程技巧
  13. Uiautomator 2.0之UiObject2类学习小记
  14. 《中华大字库2012》ttf字库字体样张总汇
  15. 百度SEO站群WordPress企业主题:企业一号 V 1.2.2
  16. html5怎么做京东表格,HTML+CSS+PS 编写京东商城首页
  17. android 检测是否模拟器,Android全面检测设备是否模拟器
  18. Java Swing JTree:树组件
  19. 【JAVA】-- 集合(四)(Map)
  20. 高校智慧实验室管理系统的实践应用

热门文章

  1. HTML+CSS+JS网站设计——上海美食(8页) 酒水网页设计作业,甜品美食网页制作作业, 学生零食网页作业
  2. 【东华初中编程试题2206】病毒复制 N 分数 快递哥
  3. 自学计算机基础知识需要什么书,学习计算机基础知识,我强烈推荐这三本书!...
  4. C语言入门-跑步问题
  5. 亚马逊多账号操作如何判断关联
  6. 18. C语言 -- 指针数组和数组指针
  7. 3D机器学习(4):pytorch入门3:张量的拼接与拆分、张量的运算、张量的统计
  8. Lebesgue可测与Borel可测
  9. fastdb学习记录#1 table、宏、query、cursor
  10. Unexpected reserved word ‘await‘