zoukankan      html  css  js  c++  java
  • Eureka

    Professor Zhang draws n points on the plane, which are conveniently labeled by 1,2,...,n. The i-th point is at (xi,yi). Professor Zhang wants to know the number of best sets. As the value could be very large, print it modulo 109+7.

    A set P (P contains the label of the points) is called best set if and only if there are at least one best pair in P. Two numbers u and v (u,vP,uv) are called best pair, if for every wPf(u,v)g(u,v,w), where f(u,v)=(xuxv)2+(yuyv)2−−−−−−−−−−−−−−−−−−√ and g(u,v,w)=f(u,v)+f(v,w)+f(w,u)2.

     


    Input
    There are multiple test cases. The first line of input contains an integer T, indicating the number of test cases. For each test case:

    The first line contains an integer n (1n1000) -- then number of points.

    Each of the following n lines contains two integers xi and yi (109xi,yi109) -- coordinates of the i-th point.
     


    Output
    For each test case, output an integer denoting the answer.
     


    Sample Input
    3 3 1 1 1 1 1 1 3 0 0 0 1 1 0 1 0 0
     


    Sample Output
    4 3 0
     
     
    #include <stdio.h>
    #include <string.h>
    #include<iostream>
    #include<algorithm>
    #include<vector>
    #include<map>
    using namespace std;
    typedef long long LL;
    #define MAXM 1000000004
    #define pi 1000000007
    
    map<pair<int ,int> ,int>x;
    map<pair<int ,int>  ,int >::iterator it;
    
    
    
    
    struct aa
    {
        long long x,y;
    
    } a[1001];
    
    int cmp(aa t1,aa t2)
    {
        return t1.x==t2.x?t1.y<t2.y:t1.x<t2.x;
    }
    LL gcd(LL a,LL b)
    {
        return b==0?a:gcd(b,a%b);
    }
    
    LL qe(LL a, LL b)
    {
        LL ans = 1;
        a = a%pi;
        while (b > 0)
        {
            if (b % 2 == 1)
                ans = (ans*a) % pi;
            b = b / 2;
            a = (a*a) % pi;
        }
        return ans;
    }
    
    int main()
    {
      //  init();
        int t,i,j,k;
        LL ans=0;
        cin>>t;
        pair <int ,int>h;
        while(t--)
        {
            cin>>k;
            ans=0;
            for(i=1; i<=k; i++)
                scanf("%lld %lld",&a[i].x,&a[i].y);
            sort(a+1,a+1+k,cmp);
            for(i=1; i<k; i++)
            {
    
                LL sum=1;
                x.clear();
                for(j=i+1; j<=k; j++)
                {
                    LL x1,y1;
                    x1=a[j].x-a[i].x;
                    y1=a[j].y-a[i].y;
                    if(x1==0&&y1==0)
                    {
                        sum++;
                        continue;
                    }
                    else
                    {
                        LL se;
                        se=gcd(x1,y1);
                        x1/=se;
                        y1/=se;
                        h=make_pair(x1,y1);
                    }
                    x[h]++;
                }
                if(sum>1)
                {
                    ans=(ans+qe(2,sum)-1-sum)%pi;
                }
    
                LL u=0;
                u=qe(2,sum)-1;
                // for(it=vis.begin(); it!=vis.end(); it++)
                for(it=x.begin(); it!=x.end(); it++)
                {
                    LL v,w=0;
                    v=it->second;
                    v=qe(2,v);
                    ans=(ans+(u)*(v-1))%pi;
                }
    
    while(i!=k&&a[i].x==a[i+1].x&&a[i].y==a[i+1].y)
    {
        i++;
    }
            }
            printf("%I64d
    ",ans);
    
        }
    }
     
  • 相关阅读:
    【js】js中的||和&&
    【jQuery】form表单元素序列化为json对象
    【jQuery】serializeArray()与serialize()的区别
    【jQuery】jquery-ui autocomplete智能提示
    【js】批量判断表单中的文本框非空
    【php】基础学习5
    【php】基础学习4
    【php】基础学习3
    SpringMVC与Struts2区别与比较总结
    iOS 改变UILabel部分颜色
  • 原文地址:https://www.cnblogs.com/woyaocheng/p/5706281.html
Copyright © 2011-2022 走看看