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的更多相关文章
随机推荐
- 【POI】使用POI 创建生成XLS,打开xls文件提示【此文件中某些文本格式可能已经更改,因为它已经超出最多允许的字体数。】
使用POI 创建生成XLS,打开xls文件提示[此文件中某些文本格式可能已经更改,因为它已经超出最多允许的字体数.] 原因: 是因为在POI处理xls的过程中,太多次调用了: HSSFFont fon ...
- 快速上手小程序的mpvue框架
一.什么是mpvue框架? mpvue 是一个使用 Vue.js 开发小程序的前端框架.框架基于 Vue.js 核心(所以建议熟练掌握vue再使用mpvue框架,否则还是建议去使用原生框架去写小程序) ...
- asp.net 4.Redirect重定向和文件图片上传
1.Response.Redirect 如图所示: 1.用户点击修改按钮, 浏览器向服务器发送一个POST请求 http://localhost:6543/UpdateUser.ashx 2.服务器的 ...
- 搭建自己的框架WedeNet(二)
WedeNet2018.Infrastructure-基础设施层:结构如下: Tools结构如下: 考虑到系统可能会有多个数据上下文(暂时以两个为例),所以根据需要定义两个T4模板用来生成对应的ent ...
- CF505E Mr. Kitayuta vs. Bamboos
cf luogu 要使得最高的柱子高度最小,考虑二分这个高度,那么剩下的就是要指定一个操作方案,使得最终每个柱子高度\(\le mid\) 因为有个柱子高度不会\(<0\)的限制,所以正着模拟不 ...
- 给没有连接因特网的centos使用yum安装其他软件(转)
https://blog.csdn.net/bbg221/article/details/78360618 在centos上,使用yum安装软件很方便,比如安装gcc,java等, 但是在没有网络的情 ...
- vue源码分析
1.new Vue的过程 1)首先Vue是一个类,初始化时已经添加很多 initMixin(Vue) 给原型添加Vue.prototype._init stateMixin( ...
- Golang新开发者要注意的陷阱和常见错误
转自:http://colobu.com/2015/09/07/gotchas-and-common-mistakes-in-go-golang/ 目录 [−] 初级 开大括号不能放在单独的一行 未使 ...
- 1.Linux文件及目录结构
Linux 文件结构 在Linux中 ,一切皆文件 目录结构
- ETL 工具和 BI 工具
ETL是数据仓库中的非常重要的一环,是承前启后的必要的一步.ETL负责将分布的.异构数据源中的数据如关系数据.平面数据文件等抽取到临时中间层后进行清洗.转换.集成,最后加载到数据仓库或数据集市中,成为 ...