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;
}

CF528E Triangles 3000的更多相关文章

  1. 【CF528E】Triangles 3000(计算几何)

    [CF528E]Triangles 3000(计算几何) 题面 CF 平面上有若干条直线,保证不平行,不会三线共点. 求任选三条直线出来围出的三角形的面积的期望. 题解 如果一定考虑直接计算这个三角形 ...

  2. Codeforces Round #296 (Div. 1) E. Triangles 3000

    http://codeforces.com/contest/528/problem/E 先来吐槽一下,一直没机会进div 1, 马力不如当年, 这场题目都不是非常难,div 2 四道题都是水题! 题目 ...

  3. Codeforces 528E Triangles 3000 - 计算几何

    题目传送门 传送点I 传送点II 传送点III 题目大意 给定$n$的平面上的直线,保证没有三条直线共点,两条直线平行.问随机选出3条直线交成的三角形面积的期望. 显然$S=\frac{1}{2}ah ...

  4. Count the number of possible triangles

    From: http://www.geeksforgeeks.org/find-number-of-triangles-possible/ Given an unsorted array of pos ...

  5. VR寒冬AR暖春,以色列AR公司再获3000万美元融资

    据统计,2015年国内至少有近70家VR公司获得天使或者A轮投资,不过狂欢并没有持续太久.2016年即将结束,资本寒冬和VR头盔的出货远不如预期,让投资者放慢了步伐,不过AR领域的热度依然不减.近日, ...

  6. iOS 消息推送报错NSCocoaErrorDomain Code=3000

    转自: http://www.cnblogs.com/zxykit/p/5207498.html Xcode7推送报错.Error Domain=NSCocoaErrorDomain Code=300 ...

  7. webstorm node 3000端口被占用

    首先说明我的问题原因,一个服务端程序用3000端口打开后,未关闭,直接强制关闭的webstorm,关闭的时候提示disconnect了,也点击了,但是打开另外一个文件,再用3000端口打开的话会提示被 ...

  8. Java集合-5. (List)已知有一个Worker 类如下: 完成下面的要求 1) 创建一个List,在List 中增加三个工人,基本信息如下: 姓名 年龄 工资 zhang3 18 3000 li4 25 3500 wang5 22 3200 2) 在li4 之前插入一个工人,信息为:姓名:zhao6,年龄:24,工资3300 3) 删除wang5 的信息 4) 利用for 循

    第六题 5. (List)已知有一个Worker 类如下: public class Worker { private int age; private String name; private do ...

  9. [ACM_搜索] Triangles(POJ1471,简单搜索,注意细节)

    Description It is always very nice to have little brothers or sisters. You can tease them, lock them ...

随机推荐

  1. 解决idea无法显示中文候选框问题

    第一:先找到idea安装目录,找到文件jre64,把它命名为“jre642”,也可以随意命名 第二步:找到Javaan安装目录下的jre  ,把它复制到idea安装目录下,命名为“jre64”. 第三 ...

  2. 生成json文件写入本地

    public class Json { public static void main(String[] args) { String fullPath = null; //例如:fullPath=& ...

  3. 【学习】SpringBoot之简介、特点、缺点、应用场景

    Spring Boot 的介绍 SpringBoot的目的在于创建和启动新的基于Spring框架的项目.Spring Boot 会选择最合适的Spring子项目和第三方开源库进行整合.大部分Sprin ...

  4. ubuntu16.04修改host上外網

    1.打开hosts文件: sudo emacs /etc/hosts 2.加入下面的内容 #chrome同步服务器 203.208.46.132 chrome.google.com203.208.46 ...

  5. leetcode-easy-string- 38 Count and Say

    mycode   91.28% 思路:题意实在太难理解了,尤其是英文又不好,只能参看下别人的资料,理解下规则.终于理解,题意是n=1时输出字符串1:n=2时,数上次字符串中的数值个数,因为上次字符串有 ...

  6. Android WebView使用与JavaScript使用

    WebView基本使用 WebView是View的一个子类,可以让你在activity中显示网页. 可以在布局文件中写入WebView:比如下面这个写了一个填满整个屏幕的WebView: <?x ...

  7. 1.5 log4j使用教程

    日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录.在apache网站:jakarta.apache.org/log4j 可以免费下载到Log ...

  8. Linux-ubuntu命令-文件、磁盘管理

    .文件管理 <1>查看文件信息:ls ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令. Linux文件或者目录名称最长可以有26 ...

  9. Cascader 级联选择器

    当一个数据集合有清晰的层级结构时,可通过级联选择器逐级查看并选择. 基础用法 有两种触发子菜单的方式 只需为 Cascader 的options属性指定选项数组即可渲染出一个级联选择器. 通过expa ...

  10. Windows环境下Mysql 5.7读写分离之使用mysql-proxy练习篇

    本文使用mysql-proxy软件,结合mysql读写分离,实现实战练习. 前期准备: 三台机器: 代理机,IP:192.168.3.33 mysql Master,IP:192.168.3.32 m ...