题意

平面上有 \(n\) 个点,选出六个点构成两个三角形,问有多少种构造方式使得两个三角形没有交集。

\(n\leq 2000\)

分析

  • 枚举连接两个三角形的两个顶点,同时能够将两个三角形划分在直线两侧的直线。

  • 考虑每个点和 \(n-1\) 个点连边,这些边按照极角排序,并维护直线左侧有多少个点(如果跨过极角等于 \(\pi\) 就再加一倍直线,同时弧度 \(+2\pi\)),那么答案增加量就是 \(\binom{{cnt}_l}{2}\times\binom{n-2-{cnt}_l}{2}\)。

  • 每对三角形会有两条直线计算到,所以最后答案除以2.

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

代码

#include<bits/stdc++.h>
using namespace std;
#define go(u) for(int i=head[u],v=e[i].to;i;i=e[i].lst,v=e[i].to)
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pb push_back
typedef long long LL;
inline int gi(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-48;ch=getchar();}
return x*f;
}
template<typename T>inline bool Max(T &a,T b){return a<b?a=b,1:0;}
template<typename T>inline bool Min(T &a,T b){return b<a?a=b,1:0;}
typedef double db;
const db INF=1.0*1e14,pi=acos(-1.0);
const int N=4004;
int n;
LL ans;
db ang[N],x[N],y[N];
LL C(int n){
return 1ll*n*(n-1)/2;
}
int main(){
n=gi();
rep(i,1,n) scanf("%lf%lf",&x[i],&y[i]);
rep(o,1,n){
int ndc=0;
rep(i,1,n) if(o^i) ang[++ndc]=atan2(y[i]-y[o],x[i]-x[o]);
sort(ang+1,ang+ndc+1);
rep(i,1,n-1) ang[++ndc]=ang[i]+2*pi;
for(int i=1,j=1;i<n;++i){
while(ang[j]-ang[i]<=pi) ++j;
int l=j-i-1,r=n-2-l;
ans+=C(l)*C(r);
}
}
printf("%lld\n",ans>>1);
return 0;
}

[CF1025F]Disjoint Triangles[极角排序+组合计数]的更多相关文章

  1. 【BZOJ-1913】signaling信号覆盖 极角排序 + 组合

    1913: [Apio2010]signaling 信号覆盖 Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 1232  Solved: 506[Subm ...

  2. How Many Triangles (极角排序 + 尺取法)

    题意:二维平面与有很多个点,然后求构成锐角三角形的个数. 思路:对于每一个三角形我们知道存在至少2个锐角,只要有一个钝角就不行了,所以我们的想法就是枚举所有夹角的状态,然后得知情况,确定用总个数减去- ...

  3. hdu-5738 Eureka(组合计数+极角排序)

    题目链接: Eureka Time Limit: 8000/4000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Pr ...

  4. hdu-5784 How Many Triangles(计算几何+极角排序)

    题目链接: How Many Triangles Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  5. 【计算几何】【极角排序】【二分】Petrozavodsk Summer Training Camp 2016 Day 6: Warsaw U Contest, XVI Open Cup Onsite, Sunday, August 28, 2016 Problem J. Triangles

    平面上给你n(不超过2000)个点,问你能构成多少个面积在[A,B]之间的Rt三角形. 枚举每个点作为直角顶点,对其他点极角排序,同方向的按长度排序,然后依次枚举每个向量,与其对应的另一条直角边是单调 ...

  6. LA 4064 (计数 极角排序) Magnetic Train Tracks

    这个题和UVa11529很相似. 枚举一个中心点,然后按极角排序,统计以这个点为钝角的三角形的个数,然后用C(n, 3)减去就是答案. 另外遇到直角三角形的情况很是蛋疼,可以用一个eps,不嫌麻烦的话 ...

  7. [CodeForces]CodeForces - 1025F Disjoint Triangles

    题意: 给出平面上n个点,问能在其中选出6个点,组成两个三角形,使得其互不相交 问有多少种选法 大致思路  考虑枚举一条直线,将所有得点分为左右两部分,其中有两个点在直线上, 以这两个点为顶点,分别统 ...

  8. 一道组合数问题--出自 曹钦翔_wc2012组合计数与动态规划

    一道组合数问题--出自 曹钦翔_wc2012组合计数与动态规划 [问题描述] 众所周知,xyc 是一个宇宙大犇,他最近在给他的学弟学妹们出模拟赛. 由于 xyc 实在是太巨了,他出了一套自认为很水的毒 ...

  9. CodeForces - 1025F:Disjoint Triangles (几何)

    A point belongs to a triangle if it lies inside the triangle or on one of its sides. Two triangles a ...

随机推荐

  1. LeetCode 题解之Reverse Words in a String

    1.题目描述 2.问题分析 使用一个vector存储每个单词. 3.代码 void reverseWords(string &s) { vector<string> v; for ...

  2. 安卓ADB命令

    查看连接的设备 adb devices -l FastBoot常用命令: fastboot erase system    #擦除system分区 fastboot erase boot    #擦除 ...

  3. android dev概念快速入门

    apk: android将源代码依赖库等经过编译后打包分发的应用. 打包详细过程如下: android-studio安装 由于google被qiang,需要制定proxy,可以使用sock,同时安装完 ...

  4. 为notifyIcon.icon属性赋图片

    System.Drawing.Bitmap bp; bp = new Bitmap(Application.StartupPath + @"\image\" + MeiYeShuo ...

  5. Oracle Database 12c Preinstall Steps for Oracle Linux Simplified

    This post is a quick reminder that Oracle Linux includes a handy RPM to address pre-installation req ...

  6. 推荐linux下的数据库开发工具DBeaver 开源免费

    linux下不错的数据库管理工具 DBeaver 操作比较友好,基于eclipse.使用jdbc链接,链接数据库非常全(oracle mysql mssql sqlite  常见的统统支持).而且可以 ...

  7. Asp连接Oracle (包含绿色版12.2客户端和ODBC驱动安装)

    我能操作的终端电脑是一台linux系统可以上互联网 ,服务器在部署在独立的私网上,不方便上互联网.服务器是2008R2.安装vs不是很方便.其所linux下作开发不是不可以,java php mono ...

  8. Alpha课堂展示(麻瓜制造者)

    目录 成员简介 演示动态图 预期用户量 演示动态图 目标用户视频 分工协作 项目管理 质量控制 团队角色与具体贡献 用户反馈 成员简介 刘双玉 http://www.cnblogs.com/liu42 ...

  9. 数据结构习题Pop Sequence的理解----小白笔记^_^

    Pop Sequence(25 分) Given a stack which can keep M numbers at most. Push N numbers in the order of 1, ...

  10. 使用docker-compose快速构建wordpress

    前提必须是在docker的环境下,关于docker的安装可以参考(考虑目前国内使用ubuntu和centos的比较多,所以就列出这两个): Ubuntu16.04安装docker centos7之do ...