hdu 5784 How Many Triangles 极角排序计算锐角直角钝角
来源:互联网 发布:开通淘宝网店 编辑:程序博客网 时间:2024/04/29 21:46
题目大意:给你n个点,计算有多少个锐角三角形。
锐角三角形个数=(图中锐角个数-钝直角个数*2)/3
转化为计算图中有几个钝直角,锐角。枚举角的顶点,然后再枚举该顶点引出的边,可以用向量表示。对这些向量进行极角排序,枚举起始边,用尺取的方法,算得与该边成锐角,钝直角的边的条数。统计,最后输出答案。
#include <bits/stdc++.h>using namespace std;const double pi=acos(-1);const int maxn=2000+5;const double eps=1e-12;typedef long long ll;struct point{ double x,y; double angle; bool operator<(point zz)const{ return angle<zz.angle; }}p[maxn];point a[maxn*2];int main(){ int n; while(~scanf("%d",&n)){ int x,y; for(int i=0;i<n;i++) scanf("%d%d",&x,&y),p[i].x=x,p[i].y=y; ll ans1=0,ans2=0; for(int i=0;i<n;i++){ int siz=0; for(int j=0;j<n;j++){ if(i==j)continue; a[siz]=point{p[j].x-p[i].x,p[j].y-p[i].y,0}; a[siz].angle=atan2(a[siz].y,a[siz].x);siz++; } sort(a,a+siz); for(int j=siz;j<2*siz;j++){ a[j].angle=a[j-siz].angle+2*pi; } int s=1,t=1,len=1; for(int j=0;j<siz;j++){ while(a[t].angle-a[j].angle<pi&&t<2*siz)t++; while(a[s].angle-a[j].angle<0.5*pi&&s<2*siz)s++; while(a[len].angle-a[j].angle<eps&&len<2*siz)len++; ans1=ans1+t-s; ans2=ans2+s-len; } } printf("%I64d\n",(ans2-ans1*2)/3); } return 0;}
0 0
- hdu 5784 How Many Triangles 极角排序计算锐角直角钝角
- [HDU 5784] How Many Triangles (几何+极角排序)
- HDU 5784 How Many Triangles(极角排序)
- HDU 5784 How Many Triangles 极角排序
- hdu 5761 How Many Triangles 极角排序
- Hdu 5784 How Many Triangles(极角排序+尺取法)
- HDU 5784 How Many Triangles
- HDU 5784 How Many Triangles
- HDU 5784 How Many Triangles(计算几何)
- 【HDU5784】How Many Triangles(极角排序 + two-pointer)
- HDU 5784- How Many Triangles-计算几何-two-pointer-数锐角三角形个数
- 根据三边判别三角形的形状(等边,等腰,直角,钝角,锐角,不能构成三角形)
- 判断三个边能否构成三角形,并判断能够成什么三角形(锐角、钝角、直角)
- HDU5784How Many Triangles(几何+极角排序)
- HDU 3561 How many times 【计算几何】
- 控制台输入三条边长,判断是否能构成三角形。如果能构成,输出三角形的周长,并且告知该三角形是什么类型(锐角、直角、钝角),再判断下该三角形是 等腰、等边还是不等边三角形。
- hdu 2609 How Many
- hdu How Many Tables
- 判断文件夹的大小,当超过多少M就删除。
- 冒泡排序算法
- 【iOS开发】让项目中的所有UIViewController打印自己的类名
- Java重载和重写
- 【iOS开发】解决使用loadNibNamed会报Could not load NIB in bundle的错误
- hdu 5784 How Many Triangles 极角排序计算锐角直角钝角
- Android 自定义ToggleButton
- android 使用TextView/EditText应该注意的地方
- 【其它】Mac配置输入法切换快捷键
- iOS开发键盘控制不输入特殊字符(结果:点击特殊字符不显示在输入框内)
- 你绝对想不到年过40岁的程序员可以有多么牛X!,程序员出路
- 欢迎使用CSDN-markdown编辑器
- 【其它】颜色的知识--亮度、色相、饱和度、对比度
- freemar对date类型处理