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

    [Usaco2010 OPen]Triangle Counting 数三角形

    Time Limit: 10 Sec  Memory Limit: 64 MB
    Submit: 394  Solved: 198
    [Submit][Status][Discuss]

    Description

    在一只大灰狼偷偷潜入Farmer Don的牛群被群牛发现后,贝西现在不得不履行着她站岗的职责。从她的守卫塔向下瞭望简直就是一件烦透了的事情。她决定做一些开发智力的小练习,防止她睡着了。想象牧场是一个X,Y平面的网格。她将N只奶牛标记为1…N (1 <= N <= 100,000),每只奶牛的坐标为X_i,Y_i (-100,000 <= X_i <= 100,000;-100,000 <= Y_i <= 100,000; 1 <= i <=N)。然后她脑海里想象着所有可能由奶牛构成的三角形。如果一个三角形完全包含了原点(0,0),那么她称这个三角形为“黄金三角形”。原点不会落在任何一对奶牛的连线上。另外,不会有奶牛在原点。给出奶牛的坐标,计算出有多少个“黄金三角形”。顺便解释一下样例,考虑五只牛,坐标分别为(-5,0), (0,2), (11,2), (-11,-6), (11,-5)。下图是由贝西视角所绘出的图示。 

    Input

    第一行:一个整数: N 第2到第N+1行: 每行两个整数X_i,Y_i,表示每只牛的坐标

    Output

    * 第一行: 一行包括一个整数,表示“黄金三角形的数量”

    Sample Input

    5
    -5 0
    0 2
    11 2
    -11 -6
    11 -5



    Sample Output

    5

    HINT

     

    Source

    题解:

    极角排序后对于某个点x,其与原点连线所在直线将平面划分为两部分,若一个部分有t个点,在这t个中任取2个与x显然不构成黄金三角形,答案就是所有三角形去掉非黄金三角形,发现对于每个点只统计某个方向的半平面内的点就能不重不漏

    具体实现过程可以用俩指针或者二分

    AC代码:
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #define ll long long
    using namespace std;
    inline const int read(){
        register int x=0,f=1;
        register char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
        return x*f;
    }
    const int N=1e5+10;
    struct node{
        ll x,y;
        double angle;
        ll operator * (node a){
            return x*a.y-y*a.x;
        }
        bool operator < (const node &a)const{
            return angle<a.angle;
        }
    }a[N];
    int n;
    ll ans;
    void work(){
        int r=1,t=0;
        for(int i=1;i<=n;i++){
            while((r%n+1)!=i&&a[i]*a[r%n+1]>=0) t++,r++;
            ans+=(ll)t*(t-1)/2;
            t--;
        }
    }
    int main(){
        n=read();
        for(int i=1;i<=n;i++){
            a[i].x=read();a[i].y=read();
            a[i].angle=atan2(a[i].y,a[i].x);
        }
        sort(a+1,a+n+1);
        work();
        printf("%lld",(ll)n*(n-1)*(n-2)/6-(ll)ans);
        return 0;
    }
  • 相关阅读:
    Selenium简单测试页面加载速度的性能(Page loading performance)
    Selenium Page object Pattern usage
    Selenium如何支持测试Windows application
    UI Automation的两个成熟的框架(QTP 和Selenium)
    分享自己针对Automation做的两个成熟的框架(QTP 和Selenium)
    敏捷开发中的测试金字塔(转)
    Selenium 的基础框架类
    selenium2 run in Jenkins GUI testing not visible or browser not open but run in background浏览器后台运行不可见
    eclipse与SVN 结合(删除SVN中已经上传的问题)
    配置Jenkins的slave节点的详细步骤适合windows等其他平台
  • 原文地址:https://www.cnblogs.com/shenben/p/6011501.html
Copyright © 2011-2022 走看看