XSY3381

点被选为点对之一的贡献我们单独计算(这部分贡献的总和为4n(n−1)(n−2)4n(n-1)(n-2)4n(n−1)(n−2))。接下来只讨论剩余部分的贡献。

先把任意三个点构成的六种选择方案合并,发现在外接圆周和弦之间的点每个有2的贡献,在外接圆上的点每个有1的贡献。

然后考虑任意四个点A,B,C,DA,B,C,DA,B,C,D的贡献。
发现当四个点构成凸四边形ABCDABCDABCD时
若∠A+∠D=180°\angle A+\angle D=180\degree∠A+∠D=180°:
A,B,C,DA,B,C,DA,B,C,D四点共圆,即其中一个点在另外三个点构成的三角形的外接圆上,因此A,B,C,DA,B,C,DA,B,C,D四个点每个有1的贡献,A,B,C,DA,B,C,DA,B,C,D四点的贡献为4。

若∠A+∠D<180°\angle A+\angle D<180\degree∠A+∠D<180°:
则必有∠B+∠C>180°\angle B+\angle C>180\degree∠B+∠C>180°。
DDD在△ABC\triangle ABC△ABC的外接圆外,选A,B,CA,B,CA,B,C为点对时,DDD无贡献。同理AAA无贡献。
BBB在△ACD\triangle ACD△ACD的外接圆弧和弦之间,选A,C,DA,C,DA,C,D为点对时,BBB有2的贡献。同理CCC有2的贡献。A,B,C,DA,B,C,DA,B,C,D四点的贡献为4。

若∠A+∠D>180°\angle A+\angle D>180\degree∠A+∠D>180°:
则必有∠B+∠C<180°\angle B+\angle C<180\degree∠B+∠C<180°。类似上种情况。

四个点构成凹四边形时,易证四个点产生的贡献为0。

因此问题转化为统计凸四边形个数。

给出四个构成凸四边形的点,任选两个点连边,有4种情况剩下两个点在连边同侧,2种情况剩下两个点在连边异侧。

给出四个构成凹四边形的点,任选两个点连边,有3种情况剩下两个点在连边同侧,3种情况剩下两个点在连边异侧。

因此设整张图中有aaa个凸四边形,bbb个凹四边形,
X=∑i<ji,j连边,再无序地选两个点,选的点在连边同侧的方案数X=\sum_{i<j}i,j连边,再无序地选两个点,选的点在连边同侧的方案数X=i<j∑​i,j连边,再无序地选两个点,选的点在连边同侧的方案数
Y=∑i<ji,j连边,再无序地选两个点,选的点在连边异侧的方案数Y=\sum_{i<j}i,j连边,再无序地选两个点,选的点在连边异侧的方案数Y=i<j∑​i,j连边,再无序地选两个点,选的点在连边异侧的方案数

可列出方程:
{4a+3b=X2a+3b=Y\begin{cases}4a+3b=X\\2a+3b=Y\end{cases}{4a+3b=X2a+3b=Y​

解得:

a=X−Y2a=\frac{X-Y}{2}a=2X−Y​

具体实现上,
对于每个点,把剩下的所有点按照和它的连线的斜率排序,求斜率可以用atan2latan2latan2l函数(加上lll避免爆精度)

然后,考虑两个点的连线,设连线两侧的点数分别是LLL和RRR(注意这里要判断,不能构成了一个箭头的形状)

选两个点在连线同侧的有(L−1)L+(R−1)R2\frac{(L−1)L+(R−1)R}{2}2(L−1)L+(R−1)R​种情况,选两个点在连线异侧的有L×RL\times RL×R种情况。

时间复杂度O(n2logn)O(n^2logn)O(n2logn)

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define pi acos(-1)
using namespace std;
typedef long long ll;
const int N=2010;
int n,tot;
double x[N],y[N],k[N];
ll ans=0;
int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
int main(){n=read();for(int i=1;i<=n;i++){x[i]=read();y[i]=read();}ans=4ll*n*(n-1)*(n-2);for(int i=1;i<=n;i++){tot=0;for(int j=1;j<=n;j++){if(i==j) continue;k[++tot]=atan2l(x[j]-x[i],y[j]-y[i]);if(k[tot]<0) k[tot]+=pi*2;}sort(k+1,k+tot+1);for(int j=1;j<=tot;j++){k[j+tot]=k[j]+pi*2;}   for(int j=1,t=1;j<=tot;j++){while(t<=tot*2&&(k[t]<k[j]+pi)) t++;int l=t-j-1;int r=n-1-l-1;ans+=(1ll*l*(l-1)/2+1ll*r*(r-1)/2-1ll*l*r)*2ll;}}printf("%lld\n",ans);return 0;
}

[XSY3381] 踢罐子(几何)相关推荐

  1. 几何深度学习(Geometric Deep Learning)技术

    几何深度学习(Geometric Deep Learning)技术 几何深度学习综述 从论文Geometric Deep Learning: Grids, Groups, Graphs, Geodes ...

  2. 虚拟纹理与几何图像技术

    虚拟纹理与几何图像技术 一. 基本图形学概念 图1. 几何与纹理. 曲面一般表示成三角网格和纹理图像,三角网格表示曲面的几何拓扑信息,纹理图像给出曲面的颜色材质等信息.将三角网格映射到平面区域的过程被 ...

  3. 使用Blender中的几何节点创建程序对象

    大小解压后:2.4G 持续时间3h 30m 1280X720 MP4 语言:英语+中英文字幕(根据原英文字幕机译更准确) 使用Blender中的几何节点按程序创建对象 信息: 使用Blender中的几 ...

  4. listen函数的第二个参数_【图像处理】OpenCV系列十七 --- 几何图像变换函数详解(一)...

    上一篇我们学习了仿射变换的warpAffine函数,知道了如何用这个函数对图像进行旋转.平移等操作,那么本节我们一起来学习一下与仿射变换相关的其他函数以及相关的几何图像变换. 一.convertMap ...

  5. 几何匹配和分合算法的图像识别技术

    第一章  引言 1.1  面像定位概述及其与面像识别的关系     这个设计所涉及到的是面像的定位和识别.简单来说,所谓面像的定位,就是在照片(静态图像)或视频(动态图像)中标出面像所在的位置,把面像 ...

  6. 几何画板画一个五边形内部的方法

    五边形属于多边形里面比较简单的,就是在四边形的基础上增加一条边而已,五边形在平面几何学上指所有由五条边围衬成及有五个角的多边形.完美五边形和正五边形都是五边形的一种特殊类型.几何画板作为专业绘图工具, ...

  7. DeepMind科学家:AI对战《星际争霸》胜算几何?

    记者 | 周翔 AI科技大本营1月29日消息,在<麻省理工科技评论>与深科技举办的新兴科技峰会上,谷歌DeepMind科学家Oriol Vinyals在会上发表了主题为<AI对战星际 ...

  8. OpenCV中BLOB特征提取与几何形状分类

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 一.方法 二值图像几何形状提取与分离,是机器视觉中重点之一,在CT ...

  9. PanoNet3D:一个基于激光雷达点云语义和几何理解的3D目标检测方法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨黄浴@知乎 来源丨https://zhuanlan.zhih ...

最新文章

  1. 网站锁定php文件命令,PHP文件锁定读写的一点注意_php
  2. wingide 显示中文 及 配色方案
  3. python【蓝桥杯vip练习题库】ADV-104打水问题
  4. UCenter实现同步登陆原理
  5. 处理数字_4_计算某列的总和
  6. java中不用impore导入的_java import机制(不用IDE)
  7. 隐马尔可夫(HMM)/感知机/条件随机场(CRF)----词性标注
  8. oracle 分表和分区哪个好_互联网大厂有哪些分库分表的思路和技巧?
  9. 三、如何设置npm镜像
  10. java 计算两个日期之间的自然周
  11. css 表格内容居中vertical-align:middle,text-align:center
  12. 基于vue的网页标尺辅助线工具(vue-ruler-tool)
  13. 无源滤波器讲解和典型DCDC稳压芯片外围电路的设计
  14. 大数据平台开发公司有哪些?
  15. 网页端哔哩哔哩4倍速播放视频
  16. java-获取上个月的第一天和最后一天
  17. 游戏角色3d建模用什么软件
  18. EF(Entity Framework、EF Core)
  19. 数据通信基础 - 信道特性(奈奎斯特定理、香农定理 )
  20. Thinkphp开发的卡密商城平台,带数据库和文档,全开源方便二次开发

热门文章

  1. yii 使用 有赞sdk_有赞ABTest系统:数据驱动增长实践
  2. docker es持久化_使用docker数据卷对容器数据持久化
  3. gitlab创建分支上传文件_Gitlab管理和使用基本教程
  4. 加密封装 怎么把_不要再封装各种Util工具类了,这个神级框架值得拥有!
  5. excel怎么设置打印区域_别再浪费打印纸了!这样设置,Excel表格再大都能打印成一页!...
  6. 7-2 作业调度算法--短作业优先 (30 分)(思路+详解+vector容器做法)Come Baby!!!!!!!!!!!
  7. [蓝桥杯2016决赛]反幻方-next_permutation枚举
  8. 快速排序和选择模版类
  9. vue动态切换css文件_vue实现样式之间的切换及vue动态样式的实现方法
  10. 排查生产问题linux命令,排查问题所用到的一些Linux命令实践(不定期更新。。)...