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. P2730 魔板 Magic Squares

    题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 我们知道魔板的每一个方格都有一种颜色.这8种颜 ...

  2. JSP乱码问题

    在JSP中通过request对象获取请求参数时,如果遇到参数值为中文的情况,若不进行处理,获取到的参数值将是乱码.乱码情况分为以下两种: 1. 获取访问请求参数时乱码,采用如下方式解决. String ...

  3. 【题解】HAOI2011Problem b

    第一次接触莫比乌斯反演,总之脑子都快要炸掉了……好难啊!本蒟蒻表示根本无法理解呜呜呜呜呜……不过在机房DL的帮助下总算是磕磕绊绊的A掉了这一题: 这道题目要我们的求的是:(1)ΣiΣj [gcd(i, ...

  4. MySQL使用笔记(六)条件数据记录查询

    By francis_hao    Dec 17,2016 条件数据记录查询 mysql> select field1,field2-- from table_name where 条件; 其中 ...

  5. Ubuntu下安装LNMP之nginx的卸载

    我在安装Nginx时,是采用自己从网上down下自己需要的nginx版本进行编译安装的,如果使用过apt库来进行安装的话可以参考这篇文章:ubuntu中彻底删除nginx 假如是编译安装的童鞋,可以按 ...

  6. 常见通用的 JOIN 查询

    SQL执行循序: 手写: SELECT DISTINCT <query_list> FROM <left_table> <join type> JOIN <r ...

  7. vue与node模版引擎的渲染标记{{}}(双花括号)冲突

    由于之前练习koa2,直接渲染的jquery写的传统页面. 这次想偷懒,直接script引入vue,发现渲染不出data值. 渲染引擎用得是xtpl, 找了半天没有发现可以修改xtpl渲染分隔符的配置 ...

  8. java基础学习(一)hashcode

    hashcode的作用 hashCode()方法是从Object类继承过来的,Object类中的hashCode()方法返回的是对象在内存中地址转换成的int值,如果对象没有重写hashCode()方 ...

  9. [BZOJ1026][SCOI2009]windy数 解题报告|数位dp

    Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 一直 ...

  10. ecma 2018, javascript spread syntax behaves like Object.assign

    as the subject. It is only supported in Chrome version 60+, so, first check the version, or just use ...