题目链接

https://codeforces.com/contest/1025/problem/F

题解

一道挺有意思的计算几何题 qwq
关键在于注意到任何一对不相交的三角形之间,一定有 \(2\) 条内公切线,而一对相交的三角形之间有 \(0\) 条。
于是枚举两个点,求一下这两个点的连线两侧分别有多少点,就可以求出有多少对三角形以它为公切线,总和除以 \(2\) 就是答案。
这个用经典扫描线套路做即可。
时间复杂度 \(O(n^2\log n)\).

代码

#include<bits/stdc++.h>
#define llong long long
#define mkpr make_pair
#define iter iterator
#define riter reversed_iterator
#define y1 Lorem_ipsum_dolor
using namespace std;inline int read()
{int x = 0,f = 1; char ch = getchar();for(;!isdigit(ch);ch=getchar()) {if(ch=='-') f = -1;}for(; isdigit(ch);ch=getchar()) {x = x*10+ch-48;}return x*f;
}const int mxN = 2000;
struct Point
{llong x,y;Point() {}Point(int _x,int _y):x(_x),y(_y) {}int quadrant() {return y>=0?(x>=0?0:1):(x>=0?3:2);}
} a[mxN+3],b[mxN*2+3];
typedef Point Vector;
Point operator +(const Point &x,const Point &y) {return Point(x.x+y.x,x.y+y.y);}
Point operator -(const Point &x,const Point &y) {return Point(x.x-y.x,x.y-y.y);}
Point operator *(const Point &x,const double &y) {return Point(x.x*y,x.y*y);}
llong Dot(Vector x,Vector y) {return x.x*y.x+x.y*y.y;}
llong Cross(Vector x,Vector y) {return x.x*y.y-x.y*y.x;}
bool cmp_ang(Point x,Point y) {return x.quadrant()!=y.quadrant()?x.quadrant()<y.quadrant():Cross(x,y)>0;}int n;int main()
{n = read();for(int i=1; i<=n; i++) a[i].x = read(),a[i].y = read();llong ans = 0ll;for(int i=1; i<=n; i++){for(int j=1; j<=n; j++) b[j] = a[j]-a[i]; swap(b[i],b[1]);sort(b+2,b+n+1,cmp_ang);for(int j=n+1; j<=n+n-1; j++) b[j] = b[j-(n-1)];for(int j=2,k=3; j<=n; j++){while(k<j||Cross(b[j],b[k+1])>0) {k++;}int cnt1 = k-j,cnt2 = n-2-cnt1;
//          printf("j=%d k=%d cnt1=%d cnt2=%d\n",j,k,cnt1,cnt2);ans += 1ll*cnt1*(cnt1-1ll)*cnt2*(cnt2-1ll)/4ll;}}ans/=2ll;printf("%I64d\n",ans);return 0;
}

Codeforces 1025F Disjoint Triangles (计算几何)相关推荐

  1. [CodeForces]CodeForces - 1025F Disjoint Triangles

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

  2. uva 12426 Counting Triangles 计算几何

    题意:给一个凸多边形,求以凸多边形的顶点为顶点的三角形中,有多少个面积小于给定数值K? 思路:旋转卡壳+二分答案 时间复杂度:n^2logn 1 #include<iostream> 2 ...

  3. CodeForces - 1355C Count Triangles(数学)

    题目链接:点击查看 题目大意:给出 A B C D ,规定 A <= x <= B <= y <= C <= z <= D ,问 ( x , y , z ) 三元组 ...

  4. CodeForces - 553C Love Triangles(二分图)

    题目链接:点击查看 题目大意:给出一个图,每条边都有一个权值,权值只能为0或1,若权值为0代表两个点互相憎恶,权值为1代表两个点互相喜爱,现在规定love三角形为图中的任意三个点之间的关系,都必须满足 ...

  5. Codeforces 1284E New Year and Castle Building (计算几何)

    题目链接 https://codeforces.com/contest/1284/problem/E 题解 我们计算选出 \(3\) 个点构成三角形覆盖的点数之和,这个值乘以 \(\frac{(n-4 ...

  6. Codeforces Round #587 C. White Sheet(思维+计算几何)

    传送门 •题意 先给一个白矩阵,再两个黑矩阵 如果两个黑矩阵能把白矩阵包含,则输出NO 否则输出YES •思路 计算几何题还是思维题呢? 想起了上初中高中做几何求面积的题 这个就类似于那样 包含的话分 ...

  7. Codeforces 并查集题集(Disjoint Sets Union Step1)

    ITMO Academy: pilot course Disjoint Sets Union Step1 A. Disjoint Sets Union 思路:并查集模板111 Code: #inclu ...

  8. Codeforces 32E Hide-and-Seek 乞讨2关于镜面反射点 计算几何

    主题链接:点击打开链接 必须指出的是,反射镜和2个人共线是不是障碍,但根据该壁其他情况 #include<cstdio> #include<iostream> #include ...

  9. Simple Polygon Embedding CodeForces - 1354C1(计算几何)

    The statement of this problem is the same as the statement of problem C2. The only difference is tha ...

最新文章

  1. 【HeadFirst 设计模式学习笔记】13 MVC分析
  2. oracle自动化,oracle自动分析
  3. 15年大厂经历!大佬总结:0基础如何学习Python?
  4. django+mysql+插入数据库网页展示内容
  5. (转)Inno Setup入门(十七)——Inno Setup类参考(3)
  6. mysql hibernate 延迟_在mysql数据库中,hibernate一对多的集合的延迟加载无效
  7. FreeRTOS学习笔记:FreeRTOS如何入门?任务就绪态、阻塞态、挂起态,傻傻分不清?
  8. python 分类变量回归_虚拟/分类变量线性回归
  9. Namesilo 域名购买及使用教程(附 Namesilo 优惠码)
  10. 常见数据库id号编码
  11. Vue-idea的搭建
  12. day15 计算圆周率
  13. mybatis 字符串比较 == 用法
  14. 最全python爬虫面试笔试题及答案汇总,三万多字,持续更新,适合新手,应届生
  15. docker之操作管理应用模板、镜像、容器、构建基础镜像、状态删除
  16. 超全面的!电工必备六大类基础知识汇总~
  17. NBA球星信息查询 需求描述 以下是一段包括球员信息的文本,要求编写一个程序,让用户能按照自己喜欢的球队查询其所有球员信 息,并格式化打印出来。 “Carmelo Anthony,Portland
  18. 静态升压法检漏的漏气速率和抽气速率
  19. 为大二软件工程专业大学生解答问题(二)
  20. ASR9K-BNG PPPoE and IPoE

热门文章

  1. 学长毕业日记 :本科毕业论文写成博士论文的神操作20210312
  2. 主成分分析的数学原理
  3. 编程中函数的返回值的定义问题的解决
  4. asp.net2.0中session在ie9下不能保存的问题
  5. ARMCM3汇编指令
  6. 【CyberSecurityLearning 56】自动化注入
  7. git reset 命令详解(一)—— Git 学习笔记 07
  8. windows 包管理器scoop的使用
  9. flash_erase and flash_eraseall
  10. 汉字乱码_别欺负我读书少,这些真的不是乱码,是汉字吗?你认识几个?