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;
    }
  • 相关阅读:
    C++中析构函数为什么要是虚函数
    依赖注入(IOC)
    ParseInt()与NaN()
    仿windows关机效果
    类似Tab的效果
    飞来飞去的广告
    Sql Server 三种连接
    JS日期处理
    绚丽的注册效果
    JS图片自动切换
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/4369172.html
Copyright © 2011-2022 走看看