题目链接:

How Many Triangles

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 570    Accepted Submission(s): 183

Problem Description
Alice has n points in two-dimensional plane. She wants to know how many different acute triangles they can form. Two triangles are considered different if they differ in at least one point.
 
Input
The input contains multiple test cases.
For each test case, begin with an integer n,
next n lines each contains two integers xi and yi.
3≤n≤2000
0≤xi,yi≤1e9
Any two points will not coincide.
 
Output
For each test case output a line contains an integer.
 
Sample Input
 
3
1 1
2 2
2 3
3
1 1
2 3
3 2
4
1 1
3 1
4 1
2 3
 
Sample Output
 
0
1
2
 
题意:
 
问有多少个锐角三角形,跟以前的求钝角和直角三角形一样,要用极角排序,不过这道题的点有共线的,所以要结合一下三角形的知识,其实就是锐角三角形三个锐角,直角和钝角三角形有两个锐角,求出锐角的个数,钝角和直角的个数,然后锐角个数减去两倍的直角钝角个数,再除3就是答案了,极角排序的问题就是精度问题了;精度ep开的小一点啦就能过啦;
 
思路:
 
哎哟,上边一不小心就说了;
 
AC代码;
 
  1. /************************************************
  2. ┆ ┏┓   ┏┓ ┆
  3. ┆┏┛┻━━━┛┻┓ ┆
  4. ┆┃       ┃ ┆
  5. ┆┃   ━   ┃ ┆
  6. ┆┃ ┳┛ ┗┳ ┃ ┆
  7. ┆┃       ┃ ┆
  8. ┆┃   ┻   ┃ ┆
  9. ┆┗━┓   ┏━┛ ┆
  10. ┆  ┃   ┃  ┆      
  11. ┆  ┃   ┗━━━┓ ┆
  12. ┆  ┃  AC代马   ┣┓┆
  13. ┆  ┃    ┏┛┆
  14. ┆  ┗┓┓┏━┳┓┏┛ ┆
  15. ┆   ┃┫┫ ┃┫┫ ┆
  16. ┆   ┗┻┛ ┗┻┛ ┆
  17. ************************************************ */
  18.  
  19. #include <iostream>
  20. #include <cstdio>
  21. #include <cstring>
  22. #include <algorithm>
  23. #include <cmath>
  24. #include <bits/stdc++.h>
  25. #include <stack>
  26.  
  27. using namespace std;
  28.  
  29. #define For(i,j,n) for(int i=j;i<=n;i++)
  30. #define mst(ss,b) memset(ss,b,sizeof(ss));
  31.  
  32. typedef long long LL;
  33.  
  34. template<class T> void read(T&num) {
  35. char CH; bool F=false;
  36. for(CH=getchar();CH<'0'||CH>'9';F= CH=='-',CH=getchar());
  37. for(num=0;CH>='0'&&CH<='9';num=num*10+CH-'0',CH=getchar());
  38. F && (num=-num);
  39. }
  40. int stk[70], tp;
  41. template<class T> inline void print(T p) {
  42. if(!p) { puts("0"); return; }
  43. while(p) stk[++ tp] = p%10, p/=10;
  44. while(tp) putchar(stk[tp--] + '0');
  45. putchar('\n');
  46. }
  47.  
  48. const LL mod=1e9+7;
  49. const double PI=acos(-1.0);
  50. const int inf=1e9;
  51. const int N=5e4+10;
  52. const int maxn=2e3+14;
  53. const double eps=1e-12;
  54.  
  55. double temp[2*maxn];
  56. int n;
  57. struct node
  58. {
  59. double x,y;
  60. }po[maxn];
  61.  
  62. int main()
  63. {
  64. while(scanf("%d",&n)!=EOF)
  65. {
  66. For(i,1,n)
  67. {
  68. scanf("%lf%lf",&po[i].x,&po[i].y);
  69. }
  70. LL ans1=0,ans2=0;
  71. For(i,1,n)
  72. {
  73. int cnt=0;
  74. For(j,1,n)
  75. {
  76. if(i==j)continue;
  77. temp[++cnt]=atan2(po[j].y-po[i].y,po[j].x-po[i].x);
  78. if(temp[cnt]<0)temp[cnt]+=2*PI;
  79. }
  80. sort(temp+1,temp+cnt+1);
  81. For(j,1,cnt)
  82. {
  83. temp[j+cnt]=temp[j]+2*PI;
  84. }
  85. int l=1,r=1,le=1;
  86. For(j,1,cnt)
  87. {
  88. while(temp[r]-temp[j]<PI&&r<=2*cnt)r++;
  89. while(temp[l]-temp[j]<0.5*PI&&l<=2*cnt)l++;
  90. while(temp[le]-temp[j]<=eps&&le<=2*cnt)le++;
  91. ans1=ans1+r-l;
  92. ans2=ans2+l-le;
  93. }
  94. }
  95. cout<<(ans2-2*ans1)/3<<"\n";
  96. }
  97. return 0;
  98. }

  

hdu-5784 How Many Triangles(计算几何+极角排序)的更多相关文章

  1. hdu 5784 How Many Triangles 计算几何,平面有多少个锐角三角形

    How Many Triangles 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5784 Description Alice has n poin ...

  2. HDU 5784 How Many Triangles

    计算几何,极角排序,双指针,二分. 直接找锐角三角形的个数不好找,可以通过反面来求解. 首先,$n$个点最多能组成三角形个数有$C_n^3$个,但是这之中还包括了直角三角形,钝角三角形,平角三角形,我 ...

  3. HDU 6538 Neko and quadrilateral(极角排序+旋转坐标系)

    这道题简直太好了,对于计算几何选手需要掌握的一个方法. 首先对于求解四边形面积,我们可以将四边形按对角线划分成两个三角形,显然此时四边形的面积最大最小值就变成了求解里这个对角线最近最远的点对. 对于此 ...

  4. bzoj 5099 [POI2018]Pionek 计算几何 极角排序

    [POI2018]Pionek Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 269  Solved: 80[Submit][Status][Disc ...

  5. 【计算几何+极角排序+爆ll】E. Convex

    https://www.bnuoj.com/v3/contest_show.php?cid=9147#problem/E [题意] 给定n个点的坐标,可以选择其中的四个点构造凸四边形,问最多能构造多少 ...

  6. 【计算几何】【极角排序】【二分】Petrozavodsk Summer Training Camp 2016 Day 6: Warsaw U Contest, XVI Open Cup Onsite, Sunday, August 28, 2016 Problem J. Triangles

    平面上给你n(不超过2000)个点,问你能构成多少个面积在[A,B]之间的Rt三角形. 枚举每个点作为直角顶点,对其他点极角排序,同方向的按长度排序,然后依次枚举每个向量,与其对应的另一条直角边是单调 ...

  7. HDU 5784 (计算几何)

    Problem How Many Triangles (HDU 5784) 题目大意 给定平面上的n个点(n<2000),询问可以组成多少个锐角三角形. 解题分析 直接统计锐角三角形较困难,考虑 ...

  8. HDU 5738 Eureka(极角排序)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5738 [题目大意] 给出平面中一些点,在同一直线的点可以划分为一个集合,问可以组成多少包含元素不少 ...

  9. hrbustoj 1305:多边形(计算几何,极角排序练习)

    多边形 Time Limit: 1000 MS     Memory Limit: 65536 K Total Submit: 113(42 users)   Total Accepted: 51(3 ...

随机推荐

  1. Linux是怎么启动的(整理)

    昨天笔试考了一道关于linux系统启动的过程,当时没答上来,现在整理出来(其实并不复杂). 按下电源按钮的直到欢迎页出来之后,linux总共做的事可以分为五步来完成. 1.  BIOS加电自检: 加电 ...

  2. 初识Dubbo 系列之6-Dubbo 配置

    配置 Xml配置 配置项说明 具体配置项,请參见:配置參考手冊 (+) API使用说明 假设不想使用Spring配置.而希望通过API的方式进行调用,请參见:API配置 (+) 配置使用说明 想知道怎 ...

  3. MySQL -- Ubuntu下的操作命令

    =======================安装======================参照MySQL官网的步骤:https://dev.mysql.com/doc/mysql-apt-repo ...

  4. ASP.NET动态网站制作(5)-- 标签语义化及知识补充

    前言:这节课主要是讲标签语义化及一些知识点的补充 内容:参考老师的博文:http://www.cnblogs.com/ruanmou/p/4821894.html

  5. iOS对象(数组)转化为JSon字符串

    - (void)seabc { NSArray *arry=[NSArray arrayWithObjects:@"0081",@"0082",@"0 ...

  6. MySQL重置root用户密码的方法【亲测可用】

    1. 报错截图 2.当确认已经忘记MySQL密码,则可以通过以下方案重置root用户密码.双击打开C:\Program Files\MySQL\MySQL Server 5.1\my.ini文件,如下 ...

  7. ICMP控制报文协议

    1.引言 ICMP经常被认为是IP层的一个组成部分.它传递差错以及其他需要注意的信息.ICMP报文通常被IP层或更高层 协议(TCP或UDP)使用.一些ICMP报文把差错报文返回给用户进程.ICMP报 ...

  8. 一阶 斜率 二阶 原函数的粗糙度 roughness

    1 2 损失函数+惩罚函数 2阶导数

  9. 【题解】T54037 最开始

    传送门 题目大意: 对于\(a+ \frac 1{a^{}}=n\)求$a^{m}+ \frac 1{a^{m}} $,对\(10^9+7\)取模. 题目做法: 乍看此题,没有思路,但是如果用数学办法 ...

  10. 谷歌postman插件的安装与使用

    下载地址:http://pan.baidu.com/s/1kTh1g4B 安装方法: 1.下载并解压 2.解压后.打开谷歌浏览器.选择很多其它工具→扩展程序,如图 3.勾选开发人员模式 4.选择载入正 ...