HDU5784(n个点组成多少钝角三角形,然而无论什么三角形都是同理的)
来源:互联网 发布:地瓜网络嗅探器 编辑:程序博客网 时间:2024/05/14 16:39
题意:给你n个点,可以组成多少钝角三角形。
分析:答案毋庸置疑,(锐角个数-(钝角个数+直角)*2)、3;
暴力的方法,枚举出所有的边,然后在枚举角度,但是这样是n^4的。太暴力
但是如果对斜率拍个序,这样就能把两两角在锐角和钝角的区间划出来。再用双指针枚举。复杂度就只有n^2*log(n)了。具体看代码。
#include<bits/stdc++.h>using namespace std;typedef long long ll;const double pi=acos(-1.0);const double eps=1e-9;int n;struct node1{ double x,y;}a[2010];double node[4010];int main(){ while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++)scanf("%lf%lf",&a[i].x,&a[i].y); ll ans1=0,ans2=0; for(int i=1;i<=n;i++) { int cnt=0; for(int j=1;j<=n;j++) { if(i==j)continue; node[++cnt]=atan2(a[i].y-a[j].y,a[i].x-a[j].x); if(node[cnt]<0)node[cnt]+=2*pi; } sort(node+1,node+1+cnt); for(int j=1;j<=cnt;j++)node[j+cnt]=node[j]+2*pi; int l=1,r=1,len=1; for(int j=1;j<=cnt;j++) { while(r<=2*cnt&&node[r]-node[j]<pi)r++; while(l<=2*cnt&&node[l]-node[j]<0.5*pi)l++; while(len<=2*cnt&&node[len]==node[j])len++; ans1+=r-l; ans2+=l-len; } } //printf("%lld %lld\n",ans2,ans2); printf("%lld\n",(ans2-2*ans1)/3); } return 0;}
阅读全文
1 0
- HDU5784(n个点组成多少钝角三角形,然而无论什么三角形都是同理的)
- 搜狗笔试题~求圆上的点最多可以组成多少个钝角三角形
- Triangle Counting(n范围内能组成多少个三角形)
- 数学问题 30个点组成多少个三角形
- 数学:给你长度1~n的线段 组成三角形最长边长度不超过你的n三角形有多少个
- 有n个1-9的互不重复的数字,能组成多少个互不相同且无重复数字的n-1位数?都是多少?
- LA 4064 求n个点 可以组成多少个锐角或者直角三角形
- 有 1,2,3,4 个数字,能组成多少个互不相同且无重复数字的三位数? 都是多少?(同余算法)
- 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? (基础c++)
- 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?(java)
- 无论什么颜色的奖牌,都是无数汗水铸成的!
- 无论什么颜色的奖牌,都是无数汗水铸成的!
- C++求解:平面上有n个点,问总共可以组成多少条直线
- 1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数 都是多少
- 1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
- 有1,2,3能组成多少个互不相同且无重复数字的三位数?都是多少?
- SPOJ3931(N个点形成三角形的最大面积)
- n个不同的数可组成多少个不同的三位数
- Android Studio 导入项目很慢的问题
- 直通BAT--卡特兰数详解
- makefile中的shell语法
- 二分图匹配匈牙利算法(DFS, BFS两种实现模板)
- D
- HDU5784(n个点组成多少钝角三角形,然而无论什么三角形都是同理的)
- iosUITbleview获得指定section中的cell
- 关于不同环境android studio 打包替换出现闪退的问题
- MapReduce功能实现七---小综合(多个job串行处理计算平均值)
- ubuntu 安装iotivity
- 一致性Hash原理
- Nginx日志切割
- Linux学习笔记:Linux基础命令之一
- javascript中文乱码