http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11713

题意:给n个点,无三点共线,求凸四边形个数。

对应凸四边形,有着一个 凹四边形,其实凹四边形,就相当于一个三角形,内部包含了一个点,则这样就可以构成一个凹四边形。  内部包含x个点,则x个凹四边形。

则题目转化为求有多少个凹四边形,再转为  每个三角形内部有多少个点

就和这题一样了

http://blog.csdn.net/viphong/article/details/51095501

按极角序扫描得到 每个三角形内部多少个点,然后 c(n,4)-它便是答案了

注意加了eps=1e6反而wa,,不加或eps=1e-12都能过。。

#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <iostream>
using namespace std;const double pi=acos(-1.0);
double eps=1e-12;
__int64 min(__int64 a,__int64 b)
{return a<b?a:b;}
__int64 max(__int64 a,__int64 b)
{return a>b?a:b;}struct node
{int x,y;node(){}double jijiao;node(int a,int b){x=a,y=b;}
};
node tm[1255];
node tmp[2455];
bool cmp(node a,node b)
{return a.jijiao<b.jijiao;
}
int n;
__int64 count(__int64 x)
{int i;int idx=1;for (i=1;i<=n;i++){if (i==x)continue; tmp[idx].x=tm[i].x-tm[x].x;tmp[idx].y=tm[i].y-tm[x].y;tmp[idx].jijiao=atan2(tmp[idx].y,tmp[idx].x);tmp[idx+n-1].jijiao=tmp[idx].jijiao+2*pi;idx++;}  sort(tmp+1,tmp+1+(2*n-2),cmp);node tp;__int64 res=0;for (i=1;i<n;i++){tp.jijiao=tmp[i].jijiao+pi+eps;int it=upper_bound(tmp+1,tmp+1+2*n-2,tp,cmp)-tmp;int cnt=it-i-1;res+= cnt*(cnt-1)/2;}int s= (n-1);s*=(n-2)*(n-3);s/=6;return s-res;
}int main()
{__int64 cnt=1;__int64 i;int t;cin>>t;while(t--){
scanf("%d",&n);for (i=1;i<=n;i++)scanf("%d%d",&tm[i].x,&tm[i].y);__int64 ans=0;for (i=1;i<=n;i++) ans+=count(i);__int64 tmp=n;tmp*=n-1;tmp*=n-2;tmp*=n-3;tmp/=24;ans=tmp-ans;printf("%I64d\n",ans); } return 0;}

HDU 3629-Convex找凸四边形个数(扫描+二分/two pointers)相关推荐

  1. 在两个有序的数组中找第N个数,二分查找 O(lgm+lgn)级

    在两个有序的数组中找第N个数,O(lgm+lgn)级 分类: 算法2009-10-09 20:52 981人阅读 评论(3) 收藏 举报 问题描述: Give a divide and conquer ...

  2. hdu 3629 Convex

    题意:给你N个点,让你选四个点组成凸多边形,求总的方法数 详细解释:http://blog.sina.com.cn/s/blog_64675f540100ksug.html 1 #include< ...

  3. HDU3629(凸四边形的个数)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3629 题意:平面上给n个点,问有多少个凸四边形? 分析:对于每个点,凹四边形的个数等于:C(n-1,3)- ...

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

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

  5. 从一个数组中找出 N 个数,其和为 M 的所有可能--最 nice 的解法

    比起讨论已经存在的大牛,我们更希望有更多有潜力的前端小伙伴成为大牛,只有这样,前端在未来才能够持续不断的发光发热. 故事的背景 这是一个呆萌炫酷吊炸天的前端算法题,曾经乃至现在也是叱咤风云在各个面试场 ...

  6. 改进,从一个数组中找出 N 个数,其和为 M 的所有可能

    特此说明,本文算法改自于<从一个数组中找出 N 个数,其和为 M 的所有可能--最 nice 的解法>一文.本文不同的是,采用二进制正序表示法,这种实现思路更直观.更简单些. 问题 从一个 ...

  7. 有史以来的第一个脚本 找出三个数的最大数字

    其实老师后来上课的时候我才知道只是要找出三个数中最大的一个,而我当时却本着从小到大排列的思想去写脚本了,也由于是第一次写脚本所以也费了好长的时间. 刚开始看到这个题目的时候觉得很简单,这一贯是我眼高手 ...

  8. leetcode 1: 找出两个数相加等于给定数 two sum

    问题描述 对于一个给定的数组,找出2个数,它们满足2个数的和等于一个特定的数,返回这两个数的索引.(从1开始) Given an array of integers, find two numbers ...

  9. 在数组中找出3个数使得它们和为0

    题目: 给定一个集合S,试找出3个数a, b, c,使得a+b+c=0.也即从集合中找出所有的和为0的3个数. 例如:集合S={-1,0, 1, 2, -1, 4},则满足条件的3个数有2对:(-1, ...

最新文章

  1. Handlebars模板引擎
  2. 如何仿写thinkphp的C方法?
  3. mysql索引失效_导致MySQL索引失效的几种常见写法
  4. 使用NSURLProtocol实现离线缓存
  5. matlab怎么实现OFDM仿真,OFDMmatlab实现仿真源代码
  6. jupyter notebook 快捷键设置字体大小_你可能并不知道这样定制炫酷的jupyter主题
  7. SOA面向服务架构简述
  8. 软件工程基础-个人项目-数独的生成与求解
  9. 基于深度学习的短时交通流预测与优化
  10. 5G移动通信网络构架与关键技术要点探讨
  11. SATA协议14种FIS介绍
  12. 区块链钱包,新一代支付宝?|筱静观察
  13. 思科模拟器Cisco Packet Tracer的下载
  14. 艾永亮:百果园的商业模式是什么?打造超级产品引领生鲜电商行业
  15. 使用性能利器 Redis实现网站的加速
  16. 企业发放的奖金根据利润提成计算
  17. 合作项目 : 人工智能专业相关职位数据分析 (爬虫+数据处理)
  18. 浏览器相关及知识积累
  19. 洛谷P3386-二分图最大匹配
  20. 怎么让计算机响音乐,如何让电脑声音更大一点

热门文章

  1. 战斗机机动动作分类与模型
  2. [MAIXPY]kpu: load error:2005, ERR_READ_FILE: read file failed问题解决
  3. 怎么花140万美元“低价”,喜提300万美元豪宅?
  4. 温酒读Qt:QObject中篇1—— Q_OBJECT的隐秘角落
  5. 垃圾分类网站 web前端 + java后端
  6. 活法 - 第四章 以利他心,度人生
  7. 拿不到 Offer 免费学,廖雪峰的“大数据分析全栈工程师”课程第11期即将封班!...
  8. 云计算技术分享:linux云计算课程学习大纲
  9. 文献阅读(182)Bufferless NoC
  10. 可视化地图__公司收集