Codeforces 1C(外接圆与正多边形)
要点
- 各点肯定都在外接圆上,边越多越接近圆面积,所以要最小面积应当取可能的最少边数。
- 给三角形求外接圆半径公式:\(R=\frac{abc}{4S}\)。
- 三个角度对应的圆心角取gcd即是要求的正多边形的一个角度,然后求面积即可。注意三个圆心角的求法是三个内角乘2.
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
typedef double db;
const db PI = acos(-1.0);
const db eps = 1e-2;
db x[3], y[3], len[3];
db sqr(db x) {
return x * x;
}
db S(db a, db b, db c) {
db p = (a + b + c) / 2;
db res = p * (p - a) * (p - b) * (p - c);
return sqrt(res);
}
db calc(db c, db a, db b) {
db res = (sqr(a) + sqr(b) - sqr(c)) / 2 / a / b;
return acos(res + 1e-8);
}
db gcd(db a, db b) {
if (fabs(b) < eps) return a;
return gcd(b, fmod(a, b));
}
int main() {
for (int i = 0; i < 3; i++)
scanf("%lf%lf", &x[i], &y[i]);
db mul = 1.0;
for (int i = 0; i < 3; i++) {
int j = (i + 1) % 3;
len[i] = sqrt(sqr(x[i] - x[j]) + sqr(y[i] - y[j]));
mul *= len[i];
}
db R = mul / 4 / S(len[0], len[1], len[2]);
db delta = -1, select;
for (int i = 0; i < 3; i++) {
db tmp = calc(len[i], len[(i + 1) % 3], len[(i + 2) % 3]);
tmp *= 2;
if (delta < 0) delta = tmp;
else delta = gcd(tmp, delta);
}
db ans = sqr(R) * sin(delta) * PI / delta;
return !printf("%.20lf\n", ans);
}
Codeforces 1C(外接圆与正多边形)的更多相关文章
- Codeforces 1C Ancient Berland Circus
传送门 题意 给出一正多边形三顶点的坐标,求此正多边形的面积最小值. 分析 为了叙述方便,定义正多边形的单位圆心角u为正多边形的某条边对其外接圆的圆心角(即外接圆的某条弦所对的圆心角). (1)多边形 ...
- CodeForces - 1C:Ancient Berland Circus (几何)
Nowadays all circuses in Berland have a round arena with diameter 13 meters, but in the past things ...
- codeforces 1C (非原创)
C. Ancient Berland Circus time limit per test 2 seconds memory limit per test 64 megabytes input sta ...
- codeforces1C
Ancient Berland Circus CodeForces - 1C 如今,Berland 的所有马戏表演都有一个圆形的竞技场,其直径为 13 米,但过去的情况有所不同. 在古代 Berlan ...
- AC日记——codeforces Ancient Berland Circus 1c
1C - Ancient Berland Circus 思路: 求出三角形外接圆: 然后找出三角形三条边在小数意义下的最大公约数; 然后n=pi*2/fgcd; 求出面积即可: 代码: #includ ...
- Educational Codeforces Round 57 (Rated for Div. 2) C 正多边形 + 枚举
https://codeforces.com/contest/1096/problem/C 题意 问是否存在一正多边形内三点构成的角度数为ang,若存在输出最小边数 题解 三点构成的角是个圆周角,假设 ...
- HDU4195 Regular Convex Polygon (正多边形、外接圆)
题意: 给你正n边形上的三个点,问n最少为多少 思路: 三个点在多边形上,所以三个点的外接圆就是这个正多边形的外接圆,余弦定理求出每个角的弧度值,即该角所对边的圆周角,该边对应的圆心角为圆心角的二倍. ...
- Codeforces Round #604 (Div. 1) - 1C - Beautiful Mirrors with queries
题意 给出排成一列的 \(n\) 个格子,你要从 \(1\) 号格子走到 \(n\) 号格子之后(相当于 \(n+1\) 号格子),一旦你走到 \(i+1\) 号格子,游戏结束. 当你在 \(i\) ...
- 计算正多边形的面积 Gym - 101840G
http://codeforces.com/gym/101840/attachments 题目大意:输入n,r,k .n代表往外扩张几次,r代表圆的内接圆半径,k代表多边形的边长.问你每次扩张多边形和 ...
随机推荐
- 在ubuntu环境安装youcompleteme
sudo apt-get update #更新软件源 sudo apt-get clang #安装clang sudo apt-get cmake #安装cmake sudo apt-get inst ...
- BJOI2018爆零记
没啥可说的 Day1 0分 T1 给你一个二进制串,每次修改一个位置,询问[l,r]区间中有多少二进制子串重排后能被3整除 T2 一个无向图(无重边自环)每个点有一个包含两种颜色的染色集合,一个边的两 ...
- java-05 面向对象
class StudentDemo { String name; int age; String address; public void study(){ System.out.println(&q ...
- MySQL业务-发放的优惠券 用户使用情况_20161028
运营部门给用户发放优惠券,如果想监控优惠券的使用效果 优惠券使用率是个反映效果的很好指标 下面sql就是针对某天对特定用户发放的优惠券在发放日期以后每天的使用情况 SELECT e.城市,e.用户ID ...
- SQL Server 将查询的结果生成insert语句
1.将查询的结果插入到一张新表(yangTest 表系统会自动生成)select Area, District, RoadName, StationName, PathDirection, Stati ...
- Oracle创建表,并添加默认值和备注
create table testemp( id varchar2(50) default sys_guid(),deptno varchar2(20) ,--部门编码 ename varchar2( ...
- 常见的post提交数据类型
原文地址:https://www.cnblogs.com/yoyoketang/p/6771696.html 常见的post提交数据类型有四种: 1.第一种:application/json:这是最常 ...
- AI-Info-Micron-Insight:Micron 美光的技术帮助 CERN 解开宇宙奥秘
ylbtech-AI-Info-Micron-Insight:Micron 美光的技术帮助 CERN 解开宇宙奥秘 1.返回顶部 1. Micron 美光的技术帮助 CERN 解开宇宙奥秘 大约 14 ...
- IoT:template
ylbtech-IoT: 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http://ylbtech.cnb ...
- javascript的三个函数
作为刚刚学习javascript的小白,最近阅读了额<Javascript Dom编程艺术>,其中有三个函数感觉很是有用,特此收藏. insertAfter函数:针对insertBefor ...