2021牛客多校2-F

F-Girlfriend

题目大意

给出四个点 A , B , C , D A, B, C, D A,B,C,D
另有两点 P 1 , P 2 P_1, P_2 P1​,P2​分别满足 ∣ A P 1 ∣ ≥ k 1 ∣ B P 1 ∣ |AP_1| \geq k_1|BP_1| ∣AP1​∣≥k1​∣BP1​∣, ∣ C P 2 ∣ ≥ k 2 ∣ D P 2 ∣ |CP_2| \geq k_2|DP_2| ∣CP2​∣≥k2​∣DP2​∣
求 P 1 , P 2 P_1, P_2 P1​,P2​相交范围的体积
Time : 1000 ms
Memory: 262144 kB

解题思路及分析

阿波罗尼斯圆,在三维情况下成为一个球,根据这个可以直接写出球的球心坐标和半径
不知道公式的也可以现场去推公式(因为是轮换对称的,只推一个坐标就可以写出另外两个)
我写的时候因为忘了结论就是现场推的但是推错好多次…… 这里给出结论:
若 , A ( x 1 , y 1 , z 1 ) , B ( x 2 , y 2 , z 2 ) , 且 P 点 满 足 ∣ A P ∣ = k ∣ B P ∣ 则 P 点 的 轨 迹 方 程 为 一 个 球 球 心 坐 标 : O ( k 2 x 2 − x 1 k 2 − 1 , k 2 y 2 − y 1 k 2 − 1 , k 2 z 2 − z 1 k 2 − 1 ) 半 径 : r = k ∣ A B ∣ ∣ k 2 − 1 ∣ 若,A(x_1, y_1, z_1), B(x_2,y_2,z_2) ,且P点满足|AP| = k|BP|  \\ \\ 则P点的轨迹方程为一个球 \\ \\   球心坐标:O(\frac{k^2x_2-x_1}{k^2-1},\frac{k^2y_2-y_1}{k^2-1},\frac{k^2z_2-z_1}{k^2-1} )\\ \\ 半径:r = \frac{k|AB|}{|k^2-1|} 若,A(x1​,y1​,z1​),B(x2​,y2​,z2​),且P点满足∣AP∣=k∣BP∣  则P点的轨迹方程为一个球   球心坐标:O(k2−1k2x2​−x1​​,k2−1k2y2​−y1​​,k2−1k2z2​−z1​​) 半径:r=∣k2−1∣k∣AB∣​
找到两个球的球心和半径后,可根据球心距与半径的关系判断两球的关系,进而求出两球相交的体积。
两球相交部分的体积可以利用积分去求,涉及到球冠等概念,可以当作结论记住,具体证明可以在其他人的博客中找到,这里只给出结论:(相交但不内含时满足)
对 于 大 球 , 根 据 余 弦 定 理 , 可 得 cos ⁡ α = R 2 + d 2 − r 2 2 R d 记 : h 1 = R ( 1 − cos ⁡ α ) 积 分 可 得 球 冠 部 分 的 体 积 : π R h 1 2 − π h 1 3 3 同 理 对 于 小 球 cos ⁡ β = r 2 + d 2 − R 2 2 r d 记 : h 2 = r ( 1 − cos ⁡ β ) 积 分 可 得 球 冠 部 分 的 体 积 : π r h 2 2 − π h 2 3 3 对于大球,根据余弦定理,可得 \\ \cos \alpha = \frac{R^2+d^2-r^2}{2Rd} \\ 记:h_1 = R(1-\cos \alpha ) \\ 积分可得球冠部分的体积:\pi Rh_1^2- \frac{\pi h_1^3}{3}\\  \\ \\ \\ 同理对于小球\\ \cos \beta = \frac{r^2+d^2-R^2}{2rd} \\ 记:h_2 = r(1-\cos \beta ) \\ 积分可得球冠部分的体积:\pi rh_2^2- \frac{\pi h_2^3}{3} 对于大球,根据余弦定理,可得cosα=2RdR2+d2−r2​记:h1​=R(1−cosα)积分可得球冠部分的体积:πRh12​−3πh13​​  同理对于小球cosβ=2rdr2+d2−R2​记:h2​=r(1−cosβ)积分可得球冠部分的体积:πrh22​−3πh23​​
将两部分求和即为相交部分的体积。

AC代码

#include <bits/stdc++.h>
typedef long long llong;
const int N = 500000 + 5;
const double PI = 3.1415926535;
using namespace std;int x[10], y[10], z[10];
int k11, k22;
double x1, y_1, z1, r1; // cmath库里有y1,牛客上会CE于是改成了y_1
double x2, y2, z2, r2;double dis(double x1, double y_1, double z1, double x2, double y2, double z2) {return (x1 - x2)*(x1 - x2) + (y_1 - y2)*(y_1 - y2) + (z1 - z2)*(z1 - z2);
}double getVolume(double r) {return 4.0 * PI * r * r * r / 3.0;
}int main() {#ifdef LOCALfreopen("E:/code/ACM/in.in", "r", stdin);freopen("E:/code/ACM/out.out", "w", stdout);#endifint T;  cin >> T;while (T--) {for (int i = 0; i < 4; i++) {scanf("%d%d%d", &x[i], &y[i], &z[i]);}scanf("%d%d", &k11, &k22);double k1 = k11;double k2 = k22;x1 = (k1 * k1 * x[1] - x[0]) / (k1 * k1 - 1);y_1 = (k1 * k1 * y[1] - y[0]) / (k1 * k1 - 1);z1 = (k1 * k1 * z[1] - z[0]) / (k1 * k1 - 1);r1 = k1 * sqrt((x[0] - x[1]) * (x[0] - x[1]) + (y[0] - y[1]) * (y[0] - y[1]) + (z[0] - z[1]) * (z[0] - z[1])) / (k1 * k1 - 1);x2 = (k2 * k2 * x[3] - x[2]) / (k2 * k2 - 1);y2 = (k2 * k2 * y[3] - y[2]) / (k2 * k2 - 1);z2 = (k2 * k2 * z[3] - z[2]) / (k2 * k2 - 1);r2 = k2 * sqrt((x[3] - x[2]) * (x[3] - x[2]) + (y[3] - y[2]) * (y[3] - y[2]) + (z[3] - z[2]) * (z[3] - z[2])) / (k2 * k2 - 1);double dd = dis(x1, y_1, z1, x2, y2, z2);double d = sqrt(dd);double r = min(r1, r2);double R = max(r1, r2);if (d >= r + R) {printf("0.000\n");} else if (d + r <= R) {printf("%.3f\n", getVolume(r));} else {double ca = (R * R + dd - r * r) / (2.0 * R * d);double h1 = R * (1 - ca);double cb = (r * r + dd - R * R) / (2.0 * r * d);double h2 = r * (1 - cb);double volume = ((3.0 * R - h1) * h1 * h1 * PI) / 3.0 + ((3.0 * r - h2) * h2 * h2 * PI) / 3.0;printf("%.3f\n", volume);}}return 0;
}

【2021牛客多校2】F-Girlfriend 计算几何相关推荐

  1. 2021牛客多校7 F. xay loves trees(主席树+DFS序)

    题意:有两颗n个点的树,找出最大子集,满足如下条件: 该点集在树1上为一条连续的链 该点集在树2上,两两无任何祖先关系 思路: 对于条件2: ​ 点u如果是点v的祖先,那么u的子树一定包含v,即一定包 ...

  2. LCS(2021牛客多校4)

    LCS(2021牛客多校4) 题意: 让你构造三个字符串s1,s2,s3,长度均为n,要求LCS(s1,s2)=a,LCS(s2,s3)=b,LCS(s1,s3)=c 题解: 先考虑三个串互相LCS为 ...

  3. K-Stack 2021牛客多校2

    链接:https://ac.nowcoder.com/acm/contest/11253/K 来源:牛客网 题目描述 ZYT had a magic permutation a1,a2,⋯ ,an a ...

  4. 【多校训练】2021牛客多校第二场

    [前言] 这是打的第二场,rk39,但是AB这两个比较简单的题都没做emm,大概还是磨合的不够.然后感觉对于阈值类的东西还不是很敏感,应该看到不太好做就直接去想这种阈值的.校内3/9(然后就开启了常年 ...

  5. 2021牛客多校二(补题)

    I.Penguins 可爱的企鹅竟然都不配被讲~ 可恶啊 ~ 题意:问同时到给定点的最短路,并且输出他们的最短路径和行走方向~且两边的点都是镜像的 左右刚好是反的 思路:从学姐代码里学到的设立一个四维 ...

  6. 2021牛客多校第八场补题 D-OR

    链接:https://ac.nowcoder.com/acm/contest/11259/D 来源:牛客网 题目描述 There are two sequences of length n−1n-1n ...

  7. 2021牛客多校第五场补题

    B-Boxes 链接:https://ac.nowcoder.com/acm/contest/11256/B 来源:牛客网 题目描述 There're nn_{}n​ boxes in front o ...

  8. [球体积交]Girlfriend 2021牛客多校第2场 F

    题目描述 ZYT and ZFeT are great PUAs and both have two girlfriends,but they never think that their girlf ...

  9. Girlfriend(2021牛客多校第二场F)

    题目描述 输入描述 输出描述 输入样例 1 1 0 0 3 0 0 2 0 0 4 0 0 3 3 输出样例 0.262 数据范围 一个非常有意思(?)的题面,由题意不难看出所求为两人所在次元 (球) ...

最新文章

  1. How to configure cross-stack EtherChannel on Cisco Catalyst 3750 switches
  2. java static method_java static关键字静态方法详解,静态方法实例分享
  3. Base64加密解密算法的C/C++代码实现
  4. msql 复杂练习
  5. C++ const成员和引用成员
  6. 5.6 稳健最小二乘法
  7. 终端软件_DMSTerminal现场管控终端软件正式发布
  8. Oracle 官方文档地址
  9. c语言中函数指针用法,C语言函数指针的用法
  10. 当当网Python图书数据分析
  11. python安装pyserial模块_Python使用pip安装pySerial串口通讯模块
  12. IT程序员常去的论坛、社区、网站有哪些?
  13. Django验证码——手机注册登录
  14. echarts 设置地图外边框以及多个geo实现缩放拖曳同步
  15. android仿微信录制短视频,拍照,自动聚焦,手动聚焦,滑动缩放功能(Camera+TextureView+rxjava实现)
  16. 【Flutter】Dart 数据类型 布尔类型 ( 布尔类型定义 | 逻辑运算 )
  17. 深度学习之美(张玉宏)——第四章 人生苦短我用python
  18. 根据日期、时间和当地经纬度计算太阳天顶角和方位角的原理
  19. 背单词的方法:抗遗忘超自然语境记单词01
  20. Python画正方体

热门文章

  1. Redis问题总结(序列化事务集群)
  2. 我国战略性新兴产业发展规划与纳米技术
  3. 年度汇总!一文了解2021 IEEE Transaction Winner奖19篇论文
  4. 【Unity入门】7.Audio和摄像机
  5. php 韩文乱码转换,Unicode字符编码之十进制韩文转为字符
  6. 记一次解决Mysql:Incorrect string value: ‘\xF0\x9F\x8D\x83\xF0\x9F...‘ for column 插入emoji表情报错问题
  7. CMake创建和使用静态链接库
  8. SwiftUI CloudKit 入门之 10 获取iCloud容器的API令牌
  9. 最新公路测量计算机,公路工程施工测量计算系统
  10. GfG第一周刷题(链表)总结