晚上的时候PC问了一下这玩意,回忆一下极角排序

相关链接:
How Many Triangles HDU - 5784(极角排序,双指针)
2019秦皇岛A - Angle Beats Gym - 102361A(极角排序,多少个直角三角形)

思路:
先对每个点极角排序,实际上就是确定了一条边,再通过双指针,就可以求出小于某个范围的角度有多少个了。

本题中求的是钝角三角形的个数,我们求出有多少个角小于等于90度,再求出有多少个角小于180度,两者相减就是钝角的个数了

#include <cstdio>
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>using namespace std;const int maxn = 4e3 + 7;
const double eps = 1e-13;
const double PI = acos(-1);
int n;
double nodes[maxn];struct Point
{double x,y;
}p[2005];int zero(double x)
{if(abs(x) < eps){return 0;}if(x < 0)return -1;return 1;
}int solve(double angle)
{int ans = 0,r = 1;for(int l = 1;l < n;l++){int ecnt = 0;while(zero(nodes[ecnt + l] - nodes[l]) == 0){ecnt++;}l = l + ecnt - 1;r = max(l + 1,r);while(r - l + 1 < n && zero(nodes[r] - nodes[l] - angle) <= 0)r++;ans += (r - l - 1) * ecnt;}return ans;
}int main()
{while(~scanf("%d",&n)){int ans = 0,notans = 0;for(int i = 1;i <= n;i++){scanf("%lf%lf",&p[i].x,&p[i].y);}for(int i = 1;i <= n;i++){int cnt = 0;for(int j = 1;j <= n;j++){if(i == j)continue;nodes[++cnt] = atan2(p[i].y - p[j].y,p[i].x - p[j].x);}sort(nodes + 1,nodes + 1 + cnt);for(int i = 1;i <= cnt;i++){nodes[i + cnt] = nodes[i] + PI * 2;}int tmp = solve(PI / 2);ans += solve(PI - 1e-9) - tmp;}printf("%d\n",ans);}return 0;
}

牛客 数三角(求多少个钝角三角形 极角排序)相关推荐

  1. 牛客题霸 [ 求二叉树的层序遍历] C++题解/答案

    牛客题霸 [ 求二叉树的层序遍历] C++题解/答案 题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该 ...

  2. 牛客题霸 [求平方根] C++题解/答案

    牛客题霸 [求平方根] C++题解/答案 题目描述 实现函数 int sqrt(int x). 计算并返回x的平方根 题解: 要求返回平方根,我们就找一个i,使得ii<=x&&( ...

  3. 牛客题霸 [ 求路径] C++题解/答案

    牛客题霸 [ 求路径] C++题解/答案 题目描述 一个机器人在m×n大小的地图的左上角(起点,下图中的标记"start"的位置). 机器人每次向下或向右移动.机器人要到达地图的右 ...

  4. 牛客 数素数 (20)

    链接:https://www.nowcoder.com/questionTerminal/e0fb49acb75f47e8b6fa2077d9071799?toCommentId=3208952 来源 ...

  5. 牛客网 2018校招真题 摩拜 排序次数

    Description 牛客网 2018校招真题 排序次数 Solving Ideas 将数组a的元素拷贝到数组b 对数组b进行排序 对比数组b,统计数组a中已排序的元素个数 如:a = [2, 11 ...

  6. 牛客暑假四 A Task Computing 【如何排序使得对答案的贡献值最大】【cmp里面不等式的推导】【累加累乘符号的学习】【DP】

    链接:登录-专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 See Problem N for PDF statements. As it says, Time is Money, Effi ...

  7. 牛客洋灰三角【矩阵快速幂】

    题目描述     洋灰是一种建筑材料,常用来筑桥搭建高层建筑,又称,水泥.混凝土.     WHZ有很多铸造成三角形的洋灰块,他想把这些洋灰三角按照一定的规律放到摆成一排的n个格子里,其中第i个格子放 ...

  8. 【CCCC】L3-021 神坛 (30分)计算几何+求三角形面积(极角排序)

    problem L3-021 神坛 (30分) 在古老的迈瑞城,巍然屹立着 n 块神石.长老们商议,选取 3 块神石围成一个神坛.因为神坛的能量强度与它的面积成反比,因此神坛的面积越小越好.特殊地,如 ...

  9. 牛客题霸题目及题解汇总

    牛客题霸 单链表的选择排序 C++题解/答案 牛客题霸 最少素数拆分 C++题解/答案 牛客题霸 两数之和 C++题解/答案 牛客题霸 反转链表 C++题解/答案 牛客题霸 二分查找 C++题解/答案 ...

最新文章

  1. mysql 监控工具
  2. AgileEAS.NET平台视频会议培训第二辑-简单插件开发应用演练(速度下载)
  3. 渗透测试之全方位信息收集神器 instarecon
  4. 投稿Cover Letter如何写出彩
  5. 基于Flink+ClickHouse构建实时游戏数据分析最佳实践
  6. windows怎么查看进程的启动时间
  7. Linux日志系统小记
  8. elk 安装与所遇问题
  9. 几种常见的跨域原理的实现
  10. Hexagon DSP系列记录(二)——写Hexagon DSP程序流程
  11. 跟父亲一样伟大的程序员,请照顾好自己!
  12. 使用特征传播重构缺失数据进行图机器学习
  13. 如何替换mac word中的换行符为空格
  14. 卡通渲染 类罪恶装备与崩坏3渲染总结
  15. 工行网银 火狐浏览器
  16. word打开提示无法加载此程序mathpage.wll
  17. 使用GCD(转自唐巧的技术博客)
  18. 量子计算机解泊松方程,试求泊松方程的解.ppt
  19. 贪婪洞窟2服务器维护,12月24日贪婪洞窟2停服维护公告_贪婪洞窟2更新了什么_3DM手游...
  20. java.net.url 兼容_java.net.Url类的应用(网络编程)

热门文章

  1. PGSQL查询某时间段内的数据、两个时间日期的分钟差、天数
  2. 中国医疗废物处理行业发展前景及投资战略分析报告2022-2027年
  3. Uncaught TypeError: Cannot set properties of undefined (setting ‘backgroundColor‘)的解决方法
  4. java实现求解n宫格
  5. el-carousel手动切换图片
  6. u盘文件损坏Linux,linux下U盘变成只读文件系统的修复
  7. Excel如何按照总课表制作个班级课表
  8. 打开文件夹并选定指定的文件
  9. Codevs 1035 火车停留 [费用流] [拆点]
  10. 学习笔记——独立按键的扩展运用