zoukankan      html  css  js  c++  java
  • [bzoj1914] [Usaco2010 OPen]Triangle Counting 数三角形

      跑去看了黄学长的题解。。

      第一次听说级角排序= =因为一直见计算几何就跑= =

      级角排序就是按 原点和点连起来的边 与x轴正半轴构成的角的角度 排序。。。排序完效果就是逆时针旋转地枚举每个点。

      要求的是覆盖原点的三角形个数。。黄金三角形各有各的姿势,但是没覆盖原点的三角形都是一个德行= =。如果一个三角形没覆盖到原点的话那么原点与三个顶点连线所跨的角度<180度。。所以如果两个点与原点连线的夹角<180度的话,那么它俩可以和它们中间的点组合成不覆盖原点的三角形。。。

      总时间复杂度O(nlogn)(来自排序= =)。

      抄黄学长代码结果#1了囧。。。

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<cmath>
     6 #include<algorithm>
     7 #define d double
     8 #define ll long long
     9 using namespace std;
    10 const int maxn=100023;
    11 struct zs{
    12     int x,y;
    13     d angel;
    14 }a[maxn];
    15 int i,j,k,n,m,r;
    16 ll size,ans;
    17 int ra,fh;char rx;
    18 inline int read(){
    19     rx=getchar();ra=0;fh=1;
    20     while((rx<'0'||rx>'9')&&rx!='-')rx=getchar();
    21     if(rx=='-')fh=-1,rx=getchar();
    22     while(rx>='0'&&rx<='9')ra*=10,ra+=rx-48,rx=getchar();return ra*fh;
    23 }
    24 bool cmp(zs a,zs b){
    25     return a.angel<b.angel;
    26 }
    27 inline bool judge(int b,int c){
    28     return (ll)a[b].x*a[c].y>=(ll)a[b].y*a[c].x;
    29 }
    30 int main(){
    31     n=read();
    32     for(i=1;i<=n;i++)a[i].x=read(),a[i].y=read(),a[i].angel=atan2(a[i].y,a[i].x);
    33     sort(a+1,a+1+n,cmp);
    34     ans=(ll)n*(ll)(n-1)*(ll)(n-2)/(ll)6;
    35     for(size=0,r=1,i=1;i<=n;i++){
    36         while(r+1!=i&&judge(i,r+1)){
    37             size++,r++;
    38             if(r>=n)r-=n;
    39         }
    40         ans-=(size-1)*size>>1;
    41         size--;
    42     }
    43     printf("%lld
    ",ans);
    44     return 0;
    45 }
    View Code
  • 相关阅读:
    phpize使用方法
    PHP安装redis扩展
    lnmp 搭建后,nginx下php文件404但是html文件正常访问
    nginx配置https访问安装ssl证书
    Linux安装git最新版本
    微信公众号开发处理微信昵称带图片问题
    如何撰写技术文档
    Asp.Net Core 2.0实现HttpResponse中繁切换
    EF6.0 下sql语句自动生成的参数类型decimal(18,2)修改
    Windows注册表详解
  • 原文地址:https://www.cnblogs.com/czllgzmzl/p/5071114.html
Copyright © 2011-2022 走看看