hdu6158

题意



初始有两个圆,按照标号去放圆,问放完 \(n\) 个圆后的总面积。

分析

圆的反演的应用。

参考blog

设反演圆心为 \(O\) 和反演半径 \(R\)

圆的反演的定义:

已知一圆 \(C\) ,圆心为 \(O\) ,半径为 \(R\) ,如果 \(P\) 与 \(P'\)在过圆心 \(O\) 的直线上且 \(OP \cdot OP'=R^2\),则称 \(P\) 与 \(P'\) 关于 \(O\) 互为反演点。

有圆的反演的几个性质:

  1. 经过\(O\)的圆,反演后成为不经过\(O\)的一条直线
  2. 不经过\(O\)的圆,反演后成为另一个圆,且圆心并不对应
  3. 不经过\(O\)的直线反演后成为一个经过\(O\)的圆
  4. 过 \(O\)的直线反演后不变



以 \((-4, 0)\) 为反演圆心,选取某一半径。( 上图数据并不准确,只是大致反应图形间的关系 )

那么将要填充的所有圆反演之后就变成了两条直线间具有相同半径的小圆,其中左边的直线为外面的大圆反演而来,右边的直线为里面的大圆反演而来。

小圆的圆心与反演圆心的连线在小圆上的交点,再反演一次得到两个点,它们之间的距离就是原来圆的直径。

code

#include<bits/stdc++.h>
using namespace std;
const double PI = acos(-1);
inline double Sqr(double x) { return x * x; }
int main() {
int T;
cin >> T;
while(T--) {
double r1, r2;
int n;
cin >> r1 >> r2 >> n;
if(r1 < r2) swap(r1, r2); // r1:大 r2:小
double x = (1.0 / r2 / 2.0 + 1.0 / r1 / 2.0) / 2.0;
double r = (1.0 / r2 / 2.0 - 1.0 / r1 / 2.0) / 2.0;
double ans = PI * (r1 - r2) * (r1 - r2);
double h = 2 * r;
for(int i = 1; i <= n / 2; i++) {
double d = hypot(x, h);
double res = PI * Sqr((1.0 / (d - r) - 1.0 / (d + r)) / 2.0);
ans += res;
if(i * 2 < n) ans += res;
h += 2.0 * r;
if(res * (n - 2 * i) < 1e-6) break;
}
printf("%.5f\n", ans);
}
return 0;
}

hdu6158(圆的反演)的更多相关文章

  1. 「HDU6158」 The Designer(圆的反演)

    题目链接多校8-1009 HDU - 6158 The Designer 题意 T(<=1200)组,如图在半径R1.R2相内切的圆的差集位置依次绘制1,2,3,到n号圆,求面积之和(n< ...

  2. 圆的反演变换(HDU4773)

    题意:给出两个相离的圆O1,O2和圆外一点P,求构造这样的圆:同时与两个圆相外切,且经过点P,输出圆的圆心和半径 分析:画图很容易看出这样的圆要么存在一个,要么存在两个:此题直接解方程是不容易的,先看 ...

  3. 【 HDU4773 】Problem of Apollonius (圆的反演)

    BUPT2017 wintertraining(15) #5G HDU - 4773 - 2013 Asia Hangzhou Regional Contest problem D 题意 给定两个相离 ...

  4. The Designer (笛卡尔定理+韦达定理 || 圆的反演)

    Nowadays, little haha got a problem from his teacher.His teacher wants to design a big logo for the ...

  5. Pick定理、欧拉公式和圆的反演

    Pick定理.欧拉公式和圆的反演 Tags:高级算法 Pick定理 内容 定点都是整点的多边形,内部整点数为\(innod\),边界整点数\(ednod\),\(S=innod+\frac{ednod ...

  6. HOJ 13102 Super Shuttle (圆的反演变换)

    HOJ 13102 Super Shuttle 链接:http://49.123.82.55/online/?action=problem&type=show&id=13102 题意: ...

  7. CF77E Martian Food(圆的反演or 笛卡尔定理+韦达定理)

    题面 传送门 这题有两种方法(然而两种我都想不到) 方法一 前置芝士 笛卡尔定理 我们定义一个圆的曲率为\(k=\pm {1\over r}\),其中\(r\)是圆的半径 若在平面上有两两相切,且六个 ...

  8. 2017多校第6场 HDU 6097 Mindis 计算几何,圆的反演

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6097 题意:有一个圆心在原点的圆,给定圆的半径,给定P.Q两点坐标(PO=QO,P.Q不在圆外),取圆 ...

  9. HDU-4773 Problem of Apollonius (圆的反演)

    参考: https://oi-wiki.org/geometry/inverse/ https://blog.csdn.net/acdreamers/article/details/16966369 ...

随机推荐

  1. P2124 奶牛美容

    题目描述 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 6 16 ................ ..XXXX....XXX... ...XXXX....XX... .XXXX ...

  2. [codeforces] 17E Palisection

    原题 题目要求相交的回文串对数,这显然非常难,但是要有一种正难则反的心态,求不出来相交的,求出来不相交的不就好了! 对于每以位置i结尾的字符串,在他后面与他不相交的就是以这个位置为结尾的个数和以这个位 ...

  3. org.json与json-lib的区别(补充 FastJson)

    org.json 是JSON国际组织官方推出的标准json解析方案,已经被 android sdk 纳入到标准内置类库,依赖项少,但直至API17版本SDK中,仅支持JSONObject与JSONAr ...

  4. [hdu 1398]简单dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1398 看到网上的题解都是说母函数……为什么我觉得就是一个dp就好了,dp[i][j]表示只用前i种硬币 ...

  5. 7月17号day9总结

    今天学习过程和小结 今天学习了如何使用idea操作hdfs. public class HDFSTest {    Configuration configuration;    FileSystem ...

  6. JS中二维数组的声明

    var myarr=new Array(); //先声明一维 for(var i=0;i<2;i++){ //一维长度为2 myarr[i]=new Array(); //再声明二维 for(v ...

  7. [POJ1595]欧拉线性筛(虽然这道题不需要...)

    欧拉线性筛. 对于它的复杂度的计算大概思考了很久. procedure build_prime; var i,j:longint; begin fillchar(vis,sizeof(vis),tru ...

  8. [Leetcode Week3]Clone Graph

    Clone Graph题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/clone-graph/description/ Description Clon ...

  9. IOS工程自动打包并发布脚本实现

    http://blog.csdn.net/ccf0703/article/details/8588667 文章首发地址:http://webfrogs.me/2013/02/18/ios-automa ...

  10. Makefile target dependency

    Makefile ..... all: T1 T2 T1: @echo "<===" $@ T2: @echo "<===" $@ ..... ma ...