传送门

求凸四边形的个数

转化成总数减去凹四边形的个数

凹四边形一定是一个三角形中间包含的另外一个点

那么枚举被包含的点,其它的对于这个点极角排序

被包含不好算,算总数减去不被包含的

枚举三角形的一个顶点,那么另外一个顶点和这个顶点关于枚举的被包含的点的角度不超过 \(\pi\)

那么直接 \(two-pointers\) 统计即可

# include <bits/stdc++.h>
using namespace std;
typedef long long ll; const int maxn(2005);
const double eps(1e-9);
const double pi(acos(-1)); int n, test, tot;
ll ans, ret; struct Point {
int x, y;
double angle; inline bool operator <(Point b) const {
return angle - eps < b.angle;
}
} a[maxn], b[maxn]; inline ll Calc(int p) {
register int i, j;
ret = (ll)(n - 1) * (n - 2) * (n - 3) / 6, tot = 0;
for (i = 1; i <= n; ++i)
if (i ^ p) {
++tot, b[tot].x = a[i].x - a[p].x, b[tot].y = a[i].y - a[p].y;
b[tot].angle = atan2(b[tot].y, b[tot].x);
b[tot + n - 1].angle = b[tot].angle + pi * 2;
}
tot += n - 1, sort(b + 1, b + tot + 1);
for (i = 1, j = 1; i < n; ++i) {
while (j < i + n - 1 && b[j].angle - b[i].angle - eps < pi) ++j;
if (j - i - 1 >= 2) ret -= (ll)(j - i - 1) * (j - i - 2) / 2;
}
return ret;
} int main() {
register int i;
scanf("%d", &test);
while (test) {
scanf("%d", &n), --test;
for (i = 1; i <= n; ++i) scanf("%d%d", &a[i].x, &a[i].y);
ans = (ll)n * (n - 1) * (n - 2) * (n - 3) / 24;
for (i = 1; i <= n; ++i) ans -= Calc(i);
printf("%lld\n", ans);
}
return 0;
}

HDU3629:Convex的更多相关文章

  1. 【Convex Optimization (by Boyd) 学习笔记】Chapter 1 - Mathematical Optimization

    以下笔记参考自Boyd老师的教材[Convex Optimization]. I. Mathematical Optimization 1.1 定义 数学优化问题(Mathematical Optim ...

  2. Stanford coursera Andrew Ng 机器学习课程编程作业(Exercise 2)及总结

    Exercise 1:Linear Regression---实现一个线性回归 关于如何实现一个线性回归,请参考:http://www.cnblogs.com/hapjin/p/6079012.htm ...

  3. [Unity3D]蓝港面试题

    1. 请简述值类型与引用类型的差别 答: 差别:1.值类型存储在内存栈中,引用类型数据存储在内存堆中,而内存单元中存放的是堆中存放的地址.2.值类型存取快,引用类型存取慢.3.值类型表示实际数据,引用 ...

  4. [LeetCode] Erect the Fence 竖立栅栏

    There are some trees, where each tree is represented by (x,y) coordinate in a two-dimensional garden ...

  5. DP的优化总结

    一.预备知识 \(tD/eD\) 问题:状态 t 维,决策 e 维.时间复杂度\(O(n^{e+t})\). 四边形不等式: 称代价函数 w 满足凸四边形不等式,当:\(w(a,c)+w(b,d)\l ...

  6. 某公司的U3D笔试题

    某公司的U3D笔试题   今天这套笔试题感觉做得一般. 随后是二对一的技术面试,但涉及的技术细节相对较少,更多的是对以前工作.项目经历的询问. 然后说今天先到这里,让我等通知. 我还特意问了一下,通知 ...

  7. Andrew NG 机器学习编程作业2 Octave

    问题描述:用逻辑回归根据学生的考试成绩来判断该学生是否可以入学 这里的训练数据(training instance)是学生的两次考试成绩,以及TA是否能够入学的决定(y=0表示成绩不合格,不予录取:y ...

  8. Egret中使用P2物理引擎

    游戏中的对象按照物理规律移动,体现重力.引力.反作用力.加速度等物体特性,实现自由落体.摇摆运动.抛物线运动,以及物理碰撞现象的模拟.用于模拟物理碰撞.物理运动的引擎称为物理引擎. 来自瑞典斯德哥尔摩 ...

  9. 某公司的C#面试题

    1. 请简述值类型与引用类型的区别 答: 可参考http://www.cnblogs.com/JimmyZhang/archive/2008/01/31/1059383.html 2.C#中所有引用类 ...

随机推荐

  1. linux防火墙(五)—— 防火墙的规则备份与还原

    一.第一种备份还原用法,使用工具 iptables-save >/opt/iprules.txt iptables-restore < /opt/iprules.txt #注意导入的文件必 ...

  2. JSP里面九个内置对象

    JSP内置对象(9个常用的内置对象) 1.request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求, 然后做出响应.它是HttpServletRequest类的实例 ...

  3. spring cloud ribbon源码解析(一)

    我们知道spring cloud中restTemplate可以通过服务名调接口,加入@loadBalanced标签就实现了负载均衡的功能,那么spring cloud内部是如何实现的呢? 通过@loa ...

  4. python3.6使用scrapy报错

    用python做爬虫的,肯定熟悉scrapy,不过新手安装总是会遇到各种奇葩错误. 错误一:building 'twisted.test.raiser' extensionerror: Microso ...

  5. leetcode-852-山脉数组的峰顶索引

    题目描述: 我们把符合下列属性的数组 A 称作山脉: A.length >= 3 存在 0 < i < A.length - 1 使得A[0] < A[1] < ... ...

  6. javascript如何阻止事件冒泡和默认行为

    阻止冒泡:    冒泡简单的举例来说,儿子知道了一个秘密消息,它告诉了爸爸,爸爸知道了又告诉了爷爷,一级级传递从而以引起事件的混乱,而阻止冒泡就是不让儿子告诉爸爸,爸爸自然不会告诉爷爷.下面的demo ...

  7. Mysql update from

    UPDATE tab1   a INNER JOIN tab_game_version as b ON a.id=b.id SET a.advert_data=0 where a.advert_dat ...

  8. Fleury算法

    关于为什么不选桥 因为选桥之后会变成两个联通分支,这时由于可能产生的新联通分支不是孤立顶点,他俩都不联通了,那么也就绝对不可能“一笔画”走下来了 关于为什么可以选除桥之外的任意一条边走 本质原因是因为 ...

  9. [转] js画图开发库--mxgraph--[graphlayout-图形布局.html]

    [From] http://chwshuang.iteye.com/blog/1797740 布局变化,下方还有动画效果选项: <!Doctype html> <html xmlns ...

  10. ZendStudio操作技巧

    1.恢复窗口默认布局 点开菜单栏上的“windows”,出来的菜单中有个“Reset Perspective...”,点这个就行了