题目:http://acm.hdu.edu.cn/showproblem.php?pid=3629

题意:平面上给n个点,问有多少个凸四边形?

分析:对于每个点,凹四边形的个数等于:C(n-1,3)-在这个点同一侧三点构成的三角形的个数。对于凸多边形的一个顶点,

其他顶点必然在穿过这个顶点的直线的同侧。

算极角时,如果是负数(-pi ~ 0),就把它加上2 * pi,这样就把角度统一到了0~2pi,另外,向这题顺次统计两个点的夹

角时,由于会出现转了一圈的情况不好计算角度,所以在原来数组后面再顺次加上n-1一个点,角度同一加2pi

#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
#include <math.h>
using namespace std;
typedef long long LL;
const int N = 750;
const double PI = acos(-1.0);
struct Point
{
int x,y;
};
Point p[N];
double A[N];
int n;
double angle(double x,double y)
{
double t = y - x;
if(t < 0) t += 2*PI;
return t;
}
LL work()
{
LL t1 = (LL)n*(n-1)*(n-2)*(n-3)/24;
for(int k=0; k<n; k++)
{
int cnt = 0;
for(int i=0; i<n; i++)
{
if(k != i)
A[cnt++] = atan2((double)(p[i].y-p[k].y),(double)(p[i].x-p[k].x));
}
sort(A,A+n-1);
LL t2 = (LL)(n-1)*(n-2)*(n-3)/6;
for(int j=0,i=0; i<n-1; i++)
{
while(j<i+n-1)
{
if(angle(A[i],A[j%(n-1)])>PI) break;
j++;
}
t2 -= (LL)(j-i-1)*(j-i-2)/2;
}
t1 -= t2;
}
return t1;
}
int main()
{
int T;
cin>>T;
while(T--)
{
cin>>n;
for(int i=0; i<n; i++)
cin>>p[i].x>>p[i].y;
cout<<work()<<endl;
}
return 0;
}

HDU3629(凸四边形的个数)相关推荐

  1. HDU 3629-Convex找凸四边形个数(扫描+二分/two pointers)

    http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11713 题意:给n个点,无三点共线,求凸四边形个数. 对应凸四边形,有着一个 ...

  2. 判断一个点是否在给定的凸四边形内

    转载:https://www.cnblogs.com/carekee/articles/3731713.html 方法一: 如果一个点在这个凸四边形内,那么按照顺时针方向,该点一定在每条边的右侧.可使 ...

  3. 计算当前四边形是否为凸四边形

    发现自己的evernote保存了很多黑科技小算法,都忘记是什么时候摘录的.因为以前上学时做过图形学相关工作,下面算法为计算四边形是否为凸四边形,算法摘自gimp(https://www.gimp.or ...

  4. 判断点是否位于凸四边形的内部

    已知四边形(凸四边形)的四个点A.B.C.D(按逆时针顺序)的坐标,求点P是否在ABCD所围成的四边形内,可以通过向量叉乘的方法实现. 原文来自:http://www.dewen.io/q/5805/ ...

  5. 寻找凸四边形的四个顶点

    利用Opencv 寻找凸四边形的四个顶点   对于一个含有凸四边形的图像,要想定位出凸四边形的四个顶点的坐标.   首先,得先对图像进行边缘检测,而边缘检测的前提是二值化图像[未进行二值化的图像进行边 ...

  6. 任意凸四边形内最大矩形

    不知道算的对不对,请大家留言指正 已知条件: 四边形的各点坐标. 矩形长宽比d. 假设四边形如下,因为是最大矩形所以肯定至少有3点与3边相交. 由三角形的内角与边的公式可知: L1=dw * sin( ...

  7. 算法题——判断四边形是否为凸四边形

    数学原理 相邻两边的 bool gimp_transform_polygon_is_convex(double x1, double y1, double x2, double y2, double ...

  8. 不正方形(四个点构成一个凸四边形)

    链接:http://oj.saikr.com/problem/ADPC2-C 题意:两黄个点得在两个红点连线的两边且红点也得在黄点连线的两边 #include<stdio.h> #incl ...

  9. 1913: [Apio2010]signaling 信号覆盖

    1913: [Apio2010]signaling 信号覆盖 Time Limit: 20 Sec Memory Limit: 64 MB Submit: 1420 Solved: 573 [Subm ...

最新文章

  1. mysql索引为啥要选择B+树 (上)
  2. php excel文件导出之二 图像导出
  3. leetcode 526. Beautiful Arrangement | 526. 优美的排列(回溯)
  4. 计算机应用领域的CIMS,计算机的应用领域
  5. C语言实现大数据除法
  6. Andrew Ng教你如何引领公司进入AI时代
  7. 计算机组成原理运算器设计实验之8位可控加减法电路设计
  8. Android 图片控件ImageView
  9. 菜鸟笔记-微信分享突然失效的解决
  10. 【LeetCode每日一题】【2021/12/8】689. 三个无重叠子数组的最大和
  11. 僵木蠕病毒快速处置建议(零成本)
  12. 如何用AI设计一幅杂志封面
  13. EARTHDATA网站(modis数据下载流程),超级详细,附有火狐浏览器downthemall使用流程,以及默认路径修改方式
  14. 事理图谱:事件演化的规律和模式
  15. Linux倒序赋值用molloc函数,请教一个C语言函数malloc的问题
  16. 常用计算机功率,【推荐】ZOL在线功率计算器 了解自用电脑的最大功率
  17. 智慧灯杆的单灯控制器安装使用说明
  18. 计算机英语while still,计算机英语刘艺王春生第4版.ppt
  19. 【AI】AI学习目录汇总
  20. 讯飞能力平台语音识别ASR接口,AIUI接口问题

热门文章

  1. Unity合批方式浅析
  2. C1-见习工程师(计算机通识)
  3. 销售技巧之绕过前台的31法
  4. 如何进行微距摄影(转)
  5. i.MX6ULL驱动开发 | 12 - 基于 Linux I2C 驱动读取AP3216C传感器
  6. Paxos Made Practical
  7. 菜鸟初学freenas
  8. Java设计模式学习笔记:单例模式(一)
  9. 美国计算机科学 嵌入式,申请美国计算机科学(CS)专业,这里有四个中肯建议!...
  10. Ansible playbook 详解