zoukankan      html  css  js  c++  java
  • hdu 5020 求3点共线的组合数

    http://acm.hdu.edu.cn/showproblem.php?pid=5020

    求3点共线的组合数

    极角排序然后组合数相加

    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <cstring>
    #include <string>
    #include <queue>
    #include <vector>
    #include<map>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    #define RD(x) scanf("%d",&x)
    #define RD2(x,y) scanf("%d%d",&x,&y)
    #define clr0(x) memset(x,0,sizeof(x))
    typedef long long LL;
    typedef pair<int,int> pii;
    const double INF=2100000000;
    
    struct point
    {
        int x,y;
    }p[1010];
    int cmp(point a,point b)
    {
        return (a.x == b.x && a.y < b.y) || a.x < b.x;
    }
    int gcd(int a,int b)
    {
        return b == 0? a:gcd(b,a%b);
    }
    map <pii,int> hash;
    int main()
    {
        int _,n;
        RD(_);
        while(_--){
            RD(n);
            for(int i = 0;i < n;++i)
                RD2(p[i].x,p[i].y);
            sort(p,p+n,cmp);
    
            map<pii,int>::iterator it;
            int ans = 0;
            for(int i = 0;i < n - 1;++i){
                hash.clear();
                for(int j = i+1;j < n;++j){
                    int dx = p[j].x - p[i].x,dy = p[j].y - p[i].y;
                    int g = gcd(dx,dy);
                    dx /= g,dy /= g;
                    hash[make_pair(dx,dy)]++;
                }
                for(it = hash.begin();it != hash.end();++it){
                    int x = it->second;
                    ans += x*(x - 1)/2;
                }
            }
            cout<<ans<<endl;
        }
        return 0 ;
    }


  • 相关阅读:
    CSS实现底部固定
    ES6新特性--多行文本
    DataTable转实体
    jQuery插件开发
    页面可编辑
    clearfix--清除浮动
    前端日历控件推荐
    图片Base64编码
    第八周学习进度博客
    人月神话多后感01
  • 原文地址:https://www.cnblogs.com/zibaohun/p/4046830.html
Copyright © 2011-2022 走看看