您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 CF