「HDU6158」 The Designer(圆的反演)

时间:2022-10-17 07:29:36

题目链接多校8-1009 HDU - 6158 The Designer

题意

T(<=1200)组,如图在半径R1、R2相内切的圆的差集位置依次绘制1,2,3,到n号圆,求面积之和(n<=1e7)。

「HDU6158」 The Designer(圆的反演)

题解

圆的反演:

(圆的反演就是半径为R,圆心O的圆为反演中心,点P的反演点就是在射线OP上满足\(|OP’|*|OP|=R^2\)的点P‘)

设切点为O,以O为圆心半径R的圆为反演点。将圆R1和R2反演得到两条直线,和两条直线相切的圆反演回去的圆就是1~n号圆的圆心。

那么它们的直径就是这些小圆的圆心和O的连线与小圆的交点反演回去的点的距离差。

「HDU6158」 The Designer(圆的反演)

再扔一次画图工具Desmos

比赛的时候想到这里就以为复杂度太高,不知道怎么预处理。其实到后面圆面积会收敛得很快。精度只要1e-5,就可以及时break掉。

代码

#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1);
const double R = 1;
int t,r1,r2,n;
double r0,d,a,b,r,s;
double ans;
int main() {
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&r1,&r2,&n);
if(r2<r1)swap(r1,r2);
d=R*(r1+r2)/r2/r1/4;
r0=d-R/2/r1;
r=r2-r1;
ans=pi*r*r;
for(int i=1;i<=n/2;++i){
a=sqrt(d*d+i*r0*i*r0*4)-r0,b=a+r0*2;
r=(R/a-R/b)/2;
s=pi*r*r;
ans+=s;
if(i*2<n)ans+=s;
if(s*(n-i*2)<1e-6){
break;
}
}
printf("%.5f\n",ans);
}
return 0;
}

「HDU6158」 The Designer(圆的反演)的更多相关文章

  1. LOJ2476&period; 「2018 集训队互测 Day 3」蒜头的奖杯 &amp&semi; LOJ2565&period; 「SDOI2018」旧试题(莫比乌斯反演)

    题目链接 LOJ2476:https://loj.ac/problem/2476 LOJ2565:https://loj.ac/problem/2565 题解 参考照搬了 wxh 的博客. 为了方便, ...

  2. hdu6158(圆的反演)

    hdu6158 题意 初始有两个圆,按照标号去放圆,问放完 \(n\) 个圆后的总面积. 分析 圆的反演的应用. 参考blog 设反演圆心为 \(O\) 和反演半径 \(R\) 圆的反演的定义: 已知 ...

  3. The Designer &lpar;笛卡尔定理&plus;韦达定理 &vert;&vert; 圆的反演)

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

  4. Loj &num;2542&period; 「PKUWC2018」随机游走

    Loj #2542. 「PKUWC2018」随机游走 题目描述 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次 ...

  5. 「LOJ6482」LJJ爱数数

    「LOJ6482」LJJ爱数数 解题思路 : 打表发现两个数 \(a, b\) 合法的充要条件是(我不管,我就是打表过的): \[ a + b = \text{gcd}(a, b)^2 \] 设 \( ...

  6. 「ZJOI2009」多米诺骨牌

    「ZJOI2009」多米诺骨牌 题目描述 有一个n × m 的矩形表格,其中有一些位置有障碍.现在要在这个表格内 放一些1 × 2 或者2 × 1 的多米诺骨牌,使得任何两个多米诺骨牌没有重叠部分,任 ...

  7. &lbrack;LOJ&num;6437&rsqb;&lbrack;BZOJ5373&rsqb;「PKUSC2018」PKUSC

    [LOJ#6437][BZOJ5373]「PKUSC2018」PKUSC 试题描述 九条可怜是一个爱玩游戏的女孩子. 最近她在玩一个无双割草类的游戏,平面上有 \(n\) 个敌人,每一个敌人的坐标为 ...

  8. LOJ2542&period; 「PKUWC2018」随机游走

    LOJ2542. 「PKUWC2018」随机游走 https://loj.ac/problem/2542 分析: 为了学习最值反演而做的这道题~ \(max{S}=\sum\limits_{T\sub ...

  9. 零元学Expression Blend 4 - Chapter 16 用实例了解互动控制项「Button」II

    原文:零元学Expression Blend 4 - Chapter 16 用实例了解互动控制项「Button」II 本章将教大家如何制作自己的Button,并以玻璃质感Button为实作案例. ? ...

随机推荐

  1. hibernate注解CascadeType

    http://blog.csdn.net/strong8808/article/details/6318994(参考) CascadeType.REFRESH:级联刷新,当多个用户同时作操作一个实体, ...

  2. Krajee 文件上传

    http://plugins.krajee.com/file-input/demo#ajax-uploads 插件官网 项目要个好看点的上传控件,于是搜到了这个. git的地址是 https://gi ...

  3. 【Gym 100685J】Just Another Disney Problem(交互&sol;排序)

    第一次做交互题. 题意是有n个数(n<1000),你通过问1 a b,后台返回你YES代表a<b,NO代表a>b.要你在10000次询问内给出一个符合的排列.n=1000来说,100 ...

  4. struct和union分析实例

    1.#include <stdio.h>#include <malloc.h>typedef struct _soft_array{    int len;    int ar ...

  5. gdb提示Missing separate debuginfos&comma; use&colon; debuginfo-install glibc-2&period;12-1&period;132&period;el6&lowbar;5&period;2&period;x86&lowbar;64

    用gdb debugc代码的时候弹出这个错误 Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6_5.2. ...

  6. 【CSS3】Advanced9:Transformation

    1.transform:rotate(-10deg) skew(20deg,10deg) scaling(2/1,2) translate/移动(100px,200px) 2.transform:ma ...

  7. cf B&period; Fox Dividing Cheese

    http://codeforces.com/contest/371/problem/B #include <cstdio> #include <iostream> #inclu ...

  8. 译MassTransit 快速入门

    给我看代码! 下面是MassTransit的功能设置. public class YourMessage { public string Text { get; set; } } public cla ...

  9. Java 动态打印菱形代码之for循环的使用

    1.自定义空心菱形 void PrintRhombus() { int i, j; int s = 4; for (i = 1; i < 2 * (s + 1); i++) { if (i &l ...

  10. 连接SQLsever数据库在C&num;中不能操作的问题

    最近小组成员在用C#连接数据库进行操作的时候,总是注册不起用户,提示为sql.client值不能为NULL,经过了一上午的百度查询,讨论,总是找不到问题所在,不得已去问了老师,老师是专业的软件工程师, ...