CodeForces 1C - Ancient Berland Circus
2015-08-05 11:09
441 查看
这道也太数学了吧!
#include <iostream> #include <cstdio> #include <cmath> #include <cstdlib> #include <iomanip> #include <algorithm> #include <cctype> #include <stack> #include <queue> #include <string> #include <cstring> #include <iomanip> #include <set> #include <vector> #include <cstdio> #include <stack> #include <sstream> #include <cstring> using namespace std; const int MAX=1000005; const double Pi=acos(-1.0); struct node { double x,y; }; double dis(node a,node b) { return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));//距离公式 } double a1cos(double a,double b,double c) { return acos((a*a+b*b-c*c)/(2*a*b));//余弦公式 } double S(double a,double b,double c) { double tmp=(a+b+c)/2; return sqrt(tmp*(tmp-a)*(tmp-b)*(tmp-c));//海伦公式求面积 } double gcd(double a,double b) { return b>1e-4?gcd(b,a-floor(a/b)*b):a;//求角的最大公约数 } int main() { node a,b,c; cin>>a.x>>a.y>>b.x>>b.y>>c.x>>c.y; double d1=dis(a,b); double d2=dis(b,c); double d3=dis(a,c); double s1=S(d1,d2,d3); double sr=d1*d2*d3/(4*s1);//求圆的半径 //cout<<sr<<endl; double ac=a1cos(d2,d3,d1); double bc=a1cos(d1,d3,d2); double cc=a1cos(d1,d2,d3); double tmp1=gcd(ac,gcd(bc,cc)); double num=Pi/tmp1; //cout<<num<<endl; printf("%.8lf\n",sr*sr/2*sin(2*Pi/num)*num); return 0; }
相关文章推荐
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析
- C#获取关键字附近文字算法实例