zoukankan      html  css  js  c++  java
  • 【计算几何】【极角序】【二分】bzoj1914 [Usaco2010 OPen]Triangle Counting 数三角形

    极角排序后枚举每个点,计算其与原点连线的左侧的半平面内的点与其组成的三角形数(二分/尺取),这些都不是黄金三角形。

    补集转化,用平面内所有三角形的个数(C(n,3))减去这些即可。

    精度很宽松,几乎不用管。

    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    typedef long long ll;
    typedef double db;
    #define N 100001
    const db PI=acos(-1.0);
    ll ans;
    db jiao[N];
    int n;
    int main()
    {
    	db x,y;
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i)
    	  {
    	  	scanf("%lf%lf",&x,&y);
    	  	db t=atan2(y,x);
    	  	jiao[i]=(t<0?t+2.0*PI:t);
    	  }
    	sort(jiao+1,jiao+n+1);
    	for(int i=1;i<=n;++i)
    	  if(jiao[i]<=PI)
    	    {
    	      int ef=upper_bound(jiao+1,jiao+n+1,jiao[i]+PI)-(jiao+i)-1;
    	      ans+=(((ll)ef*(ll)(ef-1))>>1);
    	    }
    	  else
    	    {
    	      int ef=upper_bound(jiao+1,jiao+n+1,jiao[i]-PI)-(jiao+1);
    	      ef+=(n-i);
    	      ans+=(((ll)ef*(ll)(ef-1))>>1);
    	    }
    	printf("%lld
    ",(ll)n*(ll)(n-1)*(ll)(n-2)/6-ans);
    	return 0;
    }
  • 相关阅读:
    servlet异步处理机制
    分析logfilter+session
    java web后台工作原理
    xml的作用
    本学期学习目标 企业级运用和互联网运用的区别
    JAVA EE 思维导图
    第六周
    第五周
    第四周作业
    javaee第三周
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/4369172.html
Copyright © 2011-2022 走看看