codeforces1C
Ancient Berland Circus
如今,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的更多相关文章
随机推荐
- 树莓派安装Firefox+Selenium+geckodriver
相关参考博客[Selenium]Raspbian+Selenium+Firefoxfirefox.geckodriver.exe.selenium-server-standlone版本对应及下载地址树 ...
- 23-Perl 面向对象
1.Perl 面向对象Perl 中有两种不同地面向对象编程的实现:一是基于匿名哈希表的方式,每个对象实例的实质就是一个指向匿名哈希表的引用.在这个匿名哈希表中,存储来所有的实例属性.二是基于数组的方式 ...
- ArrayList,LinkedList,Vector区别.TreeSet,TreeSet,LinkedHashSet区别
ArrayList: 基于数组的数据结构,地址连续,一旦数据保存好了,查询效率比较高,但是因为其地址连续,所以增删数据需要移动数据,影响速度 内部数组长度默认为10,当需要扩容时,数组长度按1.5倍增 ...
- C#面向对象14 List泛型集合/装箱和拆箱/字典集合(Dictionary)
1.List泛型集合 using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...
- C#面向对象12 集合
ArrayList和HashTable集合 1.ArrayList集合 ***添加元素 using System; using System.Collections.Generic; using Sy ...
- ZROI Day1 比赛解题报告
ZROI Day1 比赛解题报告 版权原因不提供题面相关信息 序 前天晚上搞得比较晚,然后早上做题很没状态,刚看到T1发现没什么思路就有点慌,赶紧看了看T2,T3, 发现T3暴力很好打,T2想了一想可 ...
- linux命令详解——crontab
基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 第4列表示 ...
- IPC之namespace.c源码解读
// SPDX-License-Identifier: GPL-2.0 /* * linux/ipc/namespace.c * Copyright (C) 2006 Pavel Emelyanov ...
- 5.Dropout
import numpy as np from keras.datasets import mnist from keras.utils import np_utils from keras.mode ...
- 【转载】Attention Mechanism in Deep Learning
本篇随笔为转载,原文地址:知乎,深度学习中Attention Mechanism详细介绍:原理.分类及应用.参考链接:深度学习中的注意力机制. Attention是一种用于提升基于RNN(LSTM或G ...