Ancient Berland Circus

CodeForces - 1C

如今,Berland 的所有马戏表演都有一个圆形的竞技场,其直径为 13 米,但过去的情况有所不同。

在古代 Berland,马戏表演的竞技场的形状为 (等角) 正多边形,其尺寸和角的度数在各马戏表演中可能各不相同。在竞技场的每个角上,有一根特殊的台柱,并且在不同台柱之间系上绳子用以标识竞技场的各条边。

最近,来自 Berland 的科学家们已经发现了某处古代马戏表演竞技场的遗址。他们只发现了三根台柱,其余的则随时间而损毁。

给定了这三根台柱的坐标。请找出该竞技场可能具有的最小面积。

输入

输入文件包含了三行,它们中的每行包含了一对数字 –– 台柱的坐标。任何方向的坐标,其绝对值均不超过 1000,且给出了小数点后至多 6 位的数字。

输出

输出古代竞技场可能的最小面积。该数值应当精确到小数点后至少 6 位数字。数据确保:最佳多边形的角度数不超过 100 。

示例

输入
0.000000 0.000000
1.000000 1.000000
0.000000 1.000000
输出
1.00000000

sol:这三个点肯定在这个三角形的外接圆上,求出圆心,求出半径,然后余弦定理求出三个圆心角,但是求Gcd很蛋碎,一开始我把eps弄成1e-8,疯狂WA,改成1e-4就过了
#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
double ax,ay,bx,by,cx,cy;
const double PI=acos(-),eps=1e-;
inline double Sqr(double x)
{
return x*x;
}
inline double Jis(double x1,double y1,double x2,double y2)
{
return sqrt(Sqr(x2-x1)+Sqr(y2-y1));
}
inline double Jis2(double x1,double y1,double x2,double y2)
{
return Sqr(x2-x1)+Sqr(y2-y1);
}
inline double gcd(double x,double y)
{
while(fabs(x)>eps&&fabs(y)>eps)
{
if(x>y) x-=floor(x/y)*y;
else y-=floor(y/x)*x;
}
return x+y;
}
int main()
{
double Zx,Zy;
scanf("%lf%lf%lf%lf%lf%lf",&ax,&ay,&bx,&by,&cx,&cy);
double a=*(bx-ax),b=*(by-ay),c=Sqr(bx)+Sqr(by)-Sqr(ax)-Sqr(ay);
double d=*(cx-ax),e=*(cy-ay),f=Sqr(cx)+Sqr(cy)-Sqr(ax)-Sqr(ay);
Zx=(c*e/b-f)/(a*e/b-d);
Zy=(c*d/a-f)/(b*d/a-e);
double r=Jis(ax,ay,Zx,Zy),r2=Jis2(ax,ay,Zx,Zy);
double ab=Jis(ax,ay,bx,by),ac=Jis(ax,ay,cx,cy),bc=Jis(bx,by,cx,cy);
double ab2=Jis2(ax,ay,bx,by),ac2=Jis2(ax,ay,cx,cy),bc2=Jis2(bx,by,cx,cy);
double Ang_ab=.*acos((ac2+bc2-ab2)/(.*ac*bc));
double Ang_ac=.*acos((ab2+bc2-ac2)/(.*ab*bc));
double Ang_bc=.*acos((ac2+ab2-bc2)/(.*ac*ab));
double Ang_Z=gcd(Ang_ac,gcd(Ang_ab,Ang_bc));
double S=.*r*r*sin(Ang_Z);
printf("%.15lf\n",(.*PI/Ang_Z)*S);
return ;
}
/*
input
0.000000 0.000000
1.000000 1.000000
0.000000 1.000000
output
1.00000000 Input
71.756151 7.532275
-48.634784 100.159986
91.778633 158.107739
Output
9991.278665811225 Input
18.716839 40.852752
66.147248 -4.083161
111.083161 43.347248
Output
4268.87997505 Input
88.653021 18.024220
51.942488 -2.527850
76.164701 24.553012
Output
1452.52866331
*/

Ps:我afo了,QAQ

 

codeforces1C的更多相关文章

随机推荐

  1. Codeforces 1238C. Standard Free2play

    传送门 题目别看错了,好像挺多人都读错了... 然后显然可以贪心,只有在需要用 $\text{magic crystals}$ 的时候才用 那么直接模拟即可 如果初始相邻两个突出的平台高度不连续那么我 ...

  2. Spring 的 AOP 概述和底层实现

    Spring 的 AOP 概述和底层实现 1. 什么是 AOP AOP (Aspect Oriented Programing),即面向切面编程 AOP 采取横向抽取机制,取代了传统纵向继承体系重复性 ...

  3. 怎样使用 v-bind 绑定 html 标签的属性值?

    1. 在 Vue 中可是使用 v-bind 对 html 中的 属性 进行绑定, 如下所示, 我们想给这个 a 标签绑定一个 title 值: <!DOCTYPE html> <ht ...

  4. webpack自定义loader并发布

    一.官网对loader的解释: 1.loader 是导出为一个函数的 node 模块.该函数在 loader 转换资源的时候调用.给定的函数将调用 loader API,并通过 this 上下文访问. ...

  5. Java object-oriented8/5

    package Chapter1.Class;/** * 制作一个简单的通讯录.. * @author LENOVO * */public class ClassDemo_01 { String na ...

  6. 基于Openresty+Naxsi的WAF:从小白到实践

    序 2019年2月18日,加入妈妈网,至今已经有四个月的时间,上周进到一个网关项目组,这个项目的主要目的是基于openResty+Naxsi实现WAF,相关技术初定涉及到openResty.Lua.N ...

  7. 怎么处理Win7电脑打开软件速度慢的情况?

    很多使用Win7系统的用户都会发现这么一个问题,就是电脑在使用过一段时间后,打开一个应用软件的速度就会变慢,非常耽误时间.下面就和大家分享一个解决Win7系统应用软件打开速度慢的小技巧. Win7系统 ...

  8. Visual Studio 添加 自定义 路径宏

    在编辑VS工程包含路径和库路径时,有时需要添加第三方包的路径,比如c++ boost库, 为了协作的方便,不合适直接把本地绝对路径添加入工程设置,此时可以添加自定义路径宏, 然后参与协作的每个开发人员 ...

  9. How to setup a native windows server 2003 tftpd

    expand tftpd.ex_ %windir%\system32\tftpd.exe instsrv tftpd %windir%\system32\tftpd.exe reg add hklm\ ...

  10. Spring源码解析--Spring的整体架构

    概述 Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.Spring是于2003 年兴起的一个轻量级的Java 开发框 ...