cf

luogu

既然要求三角形面积,不如考虑三角形的面积公式.因为是三条直线,所以可以考虑利用三个交点来算面积,如果这个三角形按照逆时针方向有\(ABC\)三点,那么他的面积为\(\frac{\vec{OA}*\vec{OB}+\vec{OB}*\vec{OC}+\vec{OC}*\vec{OA}}{2}\),其实也就是一个大三角形减去两个小三角形,得到的就是要求的三角形

所以可以先枚举一条直线,注意到三角形面积是可以枚举算贡献的,所以只要求出所有在这条直线上的边的贡献就行了.把这条直线当做\(x\)轴,对于剩下的直线,按照逆时针方向枚举(先按斜率排序然后从当前直线循环枚举一圈),加入的直线产生交点,然后这个新交点\(B\)会和之前的交点产生\(\sum_A\vec{OA}*\vec{OB}\)的贡献.显然向量叉积的和可以改为和的叉积,所以维护前缀和即可

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<vector>
#include<cmath>
#include<ctime>
#include<queue>
#include<map>
#include<set>
#define LL long long
#define db double using namespace std;
const int N=3000+10;
const db eps=1e-6;
int rd()
{
int x=0,w=1;char ch=0;
while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
struct point
{
db x,y;
point(){}
point(db nx,db ny){x=nx,y=ny;}
point operator + (const point &bb) const {return point(x+bb.x,y+bb.y);}
db operator * (const point &bb) const {return x*bb.y-y*bb.x;}
}pr;
struct line
{
db a,b,c;
bool operator < (const line &bb) const {return -(a/b)<-(bb.a/bb.b);}
}a[N],az;
point jiao(line aa,line bb){return point((bb.b*aa.c-aa.b*bb.c)/(bb.b*aa.a-aa.b*bb.a),(bb.a*aa.c-aa.a*bb.c)/(bb.a*aa.b-aa.a*bb.b));}
db sm;
int n; int main()
{
//qwqwq
n=rd();
for(int i=1;i<=n;++i)
{
a[i].a=rd(),a[i].b=rd(),a[i].c=rd();
if(!a[i].b) az=a[i],--n,--i;
}
sort(a+1,a+n+1);
if(az.a) a[++n]=az;
for(int i=1;i<=n;++i)
{
pr.x=pr.y=0;
for(int j=i+1;j<=n;++j)
{
point nw=jiao(a[i],a[j]);
sm+=pr*nw,pr=pr+nw;
}
for(int j=1;j<i;++j)
{
point nw=jiao(a[i],a[j]);
sm+=pr*nw,pr=pr+nw;
}
}
db xx=(db)n*(db)(n-1)*(db)(n-2)/6;
printf("%.8lf\n",sm/2/xx);
return 0;
}

最新文章

  1. Windows Programming ---- Beginning Visual C#
  2. 深入分析HTTP状态码502(nginx+php-fpm)
  3. (转)HTTP 长连接和短连接
  4. mac 端口被占用及kill端口
  5. 谈谈java的运行机制
  6. Excel数据生成Sql语句的方法
  7. 使用instsrv.exe+srvany.exe将应用程序安装为windows服务[转]
  8. mysql null值转换
  9. 用python开发简单ftp程序
  10. ssl证书验证
  11. shiro整合oauth
  12. CSS的常用属性
  13. svn 钩子应用 - svn 提交字符限制, 不能为空
  14. 记录一个源码安装mysql5.6的方法
  15. UILabel设置富文本后不显示省略号
  16. JavaScript基础视频教程总结(121-130章)
  17. 在Shell脚本中获取指定进程的PID
  18. hdu1506单调栈的宽度
  19. 转:Http下载文件类 支技断点续传功能
  20. Promise实例的catch方法

热门文章

  1. centos6 yum安装mysql 5.6 (完整版)
  2. 全面解读php-开发环境及配置
  3. Arrays类与Collections类
  4. slub
  5. springboot2.0+swagger集成
  6. Struts2-Ajax整合之纯JavaScript版本
  7. 阶段3 2.Spring_03.Spring的 IOC 和 DI_8 spring中bean的细节之生命周期
  8. Python 的 Collection 库
  9. 依赖注入——angular
  10. 人工智能AI------有限状态机、分层状态机、行为树