题意:给你一个不存在三线共交点的一次函数组a[i]x+b[i]y+c[i]=0。

问等概率选取三条直线,围成三角形的面积的期望。

n<=3000.

标程:

 #include<bits/stdc++.h>
using namespace std;
int n;
double ans,x,y,X,Y;
struct node{int a,b,c;}p[];
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++)
{
scanf("%d%d%d",&p[i].a,&p[i].b,&p[i].c);
if (p[i].b<) p[i].a=-p[i].a,p[i].b=-p[i].b,p[i].c=-p[i].c;//避免后面不等式的变号
}
for (int i=;i<=n;i++)
for (int j=i+;j<=n;j++)
if (-p[i].a*p[j].b<-p[j].a*p[i].b) swap(p[i],p[j]);
for (int i=;i<=n;i++)
{
X=Y=;
for (int j=i+,k=;k<n;k++,j++)
{
if (j>n) j=;
x=(double)(p[j].c*p[i].b-p[i].c*p[j].b)/(p[i].b*p[j].a-p[i].a*p[j].b);//求交点
y=(double)(p[j].c*p[i].a-p[i].c*p[j].a)/(p[i].a*p[j].b-p[i].b*p[j].a);//这样写对0有符号,可以避免被0除
ans+=x*Y-X*y;//叉积求平行四边形面积
X+=x;Y+=y;
}
}
printf("%.4lf\n",ans*/n/(n-)/(n-));
return ;
}

题解:叉积前缀和

最愚蠢的方法自然是n^3枚举直线。计算几何常用套路前缀和。将直线按照斜率排序,枚举直线a和直线b,统计斜率在[a,b]之间的三角形面积和。用叉积来求需要交点,一个交点为直线a和直线b的交点,另一个交点集合为直线a与中间直线们的交点(前缀和维护x坐标和,y坐标和)。

注意三角形的面积要通过三个顶点的两两的叉积来求。

时间复杂度O(n^2)。

附:CF官方题解还有一个超级牛逼的方法。外框一个矩形,那么三角形面积就等于矩形面积减去三块直线夹角夹成的四边形。每两条直线的夹角(有两个)夹成的四边形被统计多少次,也就是斜率在这个夹角范围内的直线条数,可以用叉积是否在其中。

CF528E Triangles3000的更多相关文章

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

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

  2. CF528E Triangles 3000

    cf luogu 既然要求三角形面积,不如考虑三角形的面积公式.因为是三条直线,所以可以考虑利用三个交点来算面积,如果这个三角形按照逆时针方向有\(ABC\)三点,那么他的面积为\(\frac{\ve ...

随机推荐

  1. JUC源码分析-集合篇(四)CopyOnWriteArrayList

    JUC源码分析-集合篇(四)CopyOnWriteArrayList Copy-On-Write 简称 COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容,当某个人想 ...

  2. hdu6354 /// 圆的相交

    题目大意: 给定m r 初始圆盘以原点为圆心半径为r 给定m个圆的圆心(x,y) 半径r 保证m个圆互不相交且不会覆盖圆盘 用这m个圆来切割初始的圆盘求最后圆盘外围的长度 求圆与圆盘的交点 减去圆盘上 ...

  3. 如何在vue-cli 中适当的配置,来满足自己项目需求 ?

    1. 改变index.js 中端口号host host:'localhost' 改为 host: '0.0.0.0' 然后换成自己的ip 访问: 2. 在vue 中运行cnpm run start 中 ...

  4. extern static和函数

    #include <stdio.h> int sum(int a, int b); int main() { /************************************** ...

  5. 本地调试H5页面

    摘要 详细讲述微信H5页面调试(安装在安卓或iOS手机上的),钉钉内H5页面的调试,QQ.微博以及各浏览器上H5页面的调试方法 背景 大学毕业快要一年了,用leader的话说我也是有一年开发经验的前端 ...

  6. Vue之自建管理后台(三)登录页面

    在做登录页面之前,我们必须得完成路由的设定... 按照之前的设计我们路由的文件夹是src/router 官方默认的index.js,如下: import Vue from 'vue' import R ...

  7. 如何实现qq消息轰炸

    1.新建一个文本文档复制以下代码 Set WshShell = WScript.CreateObject("Wscript.Shell")WshShell.AppActivate& ...

  8. line-height 行高的使用

    line-height:normal; 默认  字体 line-height:1.5; line-height:200%; line-height:50px;  ps : 固定的值 line-heig ...

  9. jq-在线引入

    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script><sc ...

  10. sublime快捷键汇总

    Sublime Text 3 快捷键精华版 Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctrl+G:跳转到第几行Ctrl+W:关闭当前打开文件Ctrl+Shift+W:关闭所 ...