HDU3629:Convex
传送门
求凸四边形的个数
转化成总数减去凹四边形的个数
凹四边形一定是一个三角形中间包含的另外一个点
那么枚举被包含的点,其它的对于这个点极角排序
被包含不好算,算总数减去不被包含的
枚举三角形的一个顶点,那么另外一个顶点和这个顶点关于枚举的被包含的点的角度不超过 \(\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的更多相关文章
- 【Convex Optimization (by Boyd) 学习笔记】Chapter 1 - Mathematical Optimization
以下笔记参考自Boyd老师的教材[Convex Optimization]. I. Mathematical Optimization 1.1 定义 数学优化问题(Mathematical Optim ...
- Stanford coursera Andrew Ng 机器学习课程编程作业(Exercise 2)及总结
Exercise 1:Linear Regression---实现一个线性回归 关于如何实现一个线性回归,请参考:http://www.cnblogs.com/hapjin/p/6079012.htm ...
- [Unity3D]蓝港面试题
1. 请简述值类型与引用类型的差别 答: 差别:1.值类型存储在内存栈中,引用类型数据存储在内存堆中,而内存单元中存放的是堆中存放的地址.2.值类型存取快,引用类型存取慢.3.值类型表示实际数据,引用 ...
- [LeetCode] Erect the Fence 竖立栅栏
There are some trees, where each tree is represented by (x,y) coordinate in a two-dimensional garden ...
- DP的优化总结
一.预备知识 \(tD/eD\) 问题:状态 t 维,决策 e 维.时间复杂度\(O(n^{e+t})\). 四边形不等式: 称代价函数 w 满足凸四边形不等式,当:\(w(a,c)+w(b,d)\l ...
- 某公司的U3D笔试题
某公司的U3D笔试题 今天这套笔试题感觉做得一般. 随后是二对一的技术面试,但涉及的技术细节相对较少,更多的是对以前工作.项目经历的询问. 然后说今天先到这里,让我等通知. 我还特意问了一下,通知 ...
- Andrew NG 机器学习编程作业2 Octave
问题描述:用逻辑回归根据学生的考试成绩来判断该学生是否可以入学 这里的训练数据(training instance)是学生的两次考试成绩,以及TA是否能够入学的决定(y=0表示成绩不合格,不予录取:y ...
- Egret中使用P2物理引擎
游戏中的对象按照物理规律移动,体现重力.引力.反作用力.加速度等物体特性,实现自由落体.摇摆运动.抛物线运动,以及物理碰撞现象的模拟.用于模拟物理碰撞.物理运动的引擎称为物理引擎. 来自瑞典斯德哥尔摩 ...
- 某公司的C#面试题
1. 请简述值类型与引用类型的区别 答: 可参考http://www.cnblogs.com/JimmyZhang/archive/2008/01/31/1059383.html 2.C#中所有引用类 ...
随机推荐
- Python 资源大全
我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-python 是 vinta 发起维护的 Python 资源列表,内容包括:Web框架.网络 ...
- day 09 课后作业
# -*- coding: utf-8 -*-# @Time : 2018/12/28 14:25# @Author : Endless-cloud# @Site : # @File : 08 课后作 ...
- 编程开发之--java多线程学习总结(1)问题引入与概念叙述
1.经典问题,火车站售票,公共票源箱,多个窗口同时取箱中车票销售 package com.lfy.ThreadsSynchronize; /** * 解决办法分析:即我们不能同时让超过两个以上的线程进 ...
- pytest+jenkins安装+allure导出报告
环境安装: windows7+64位 pytest:4.0.2 allure的安装:allure的python库pytest-allure-adaptor jenkins的安装:2.138.2 JDK ...
- 网络基础 08_NAT
1 NAT的基本概念 为什么需要NAT IPv4地址紧缺 什么是NAT NAT(Network Address Translation) 私有IPv4地址 10.0.0.0 - 10.255.255. ...
- docker 暴露2375 端口。
网上找的.大多不能用...一下是我自己找了半天的方法...,可能是版本太旧的原因 下图解决方法: ubuntu: 18.04 docker: Docker version 18.09.2, build ...
- 利用ReentrantLock简单实现一个阻塞队列
借助juc里的ReentrantLock实现一个阻塞队列结构: package demo.concurrent.lock.queue; import java.util.concurrent.lock ...
- Python+USB+Vnet+FTP传输文件开发记录
做一个Python+USB+Vnet+FTP传输文件开发记录
- RocketMQ学习笔记(一)eclipse版的quickstart
学而时习之,不亦说乎! 自己搭建个学习用的RocketMQ总是很麻烦,需要虚拟机环境,网络,需要安装rocketmq,启动.时间久了再去看,又不知道这个虚拟机是干嘛的了. 直接在eclipse中启动, ...
- SecureCRTPortable的安装和使用(图文详解)
不多说,直接上干货! 玩玩这个远程连接软件,是个绿色软件. 别人已经做好了的. 解压之后, 下面,软件展示下, 这会默认去打开, 为了,方便,使用,放到桌面,作为快捷方式 成功 欢迎大家,加入我的微信 ...