zoukankan      html  css  js  c++  java
  • C 几何水题 求不同斜率的数目 枚举+set

    Description

    Master LU 非常喜欢数学,现在有个问题:在二维空间上一共有n个点,LU每连接两个点,就会确定一条直线,对应有一个斜率。现在LU把平面内所有点中任意两点连线,得到的斜率放入一个集合中(若斜率不存在则不计入集合),他想知道这个集合中有多少个元素。


    Input

    第一行是一个整数T,代表T组测试数据
    每组数据第一行是一个整数n,代表点的数量。2<n<1000
    接下来n行,每行两个整数,0<=x<10000,0<=y<10000,代表点的坐标

    Output

    输出斜率集合中有多少个元素

    Sample Input

    2
    4
    1 1
    2 2
    3 3
    3 6
    4
    1 1
    2 2
    2 0
    3 1

    Sample Output

    3
    3

    # include <cstdio>
    # include <cstring>
    # include <set>
    # define LL long long
    # define INF 0x3f3f3f3f
    using namespace std ;
    
    struct pot
    {
        int x ;
        int y ;
    
    }p[1010];
    
    double xielv(pot t1 , pot t2)
    {
        double temp1 = double(t2.y - t1.y) ;
        double temp2 = double(t2.x - t1.x) ;
        if (temp2 == 0)
            return INF ;
        else
            return double(temp1/temp2) ;
    }
    
    int main ()
    {
      //  freopen("in.txt","r",stdin) ;
        int T ;
        scanf("%d" , &T) ;
        while (T--)
        {
           int n , i ,j;
           set<double> s ;
           scanf("%d" , &n) ;
           for (i = 0 ; i < n ;i++)
            scanf("%d %d" , &p[i].x , &p[i].y) ;
           for (i = 0 ; i < n ; i++)
            for (j = i +1 ; j < n ; j++)
           {
               double t = xielv(p[i],p[j]) ;
               if (t != INF)
                  s.insert(t) ;
           }
           printf("%d
    " , s.size()) ;
        }
    
    
    
        return 0 ;
    }
    View Code
  • 相关阅读:
    Node.js理解
    PayPal为什么从Java迁移到Node.js
    移动开发技巧总结
    Flex性能调优相关的一些总结
    Flex组件的生命周期
    Adobe Flash Builder 4.7 新功能详解
    【Django】Cookie
    【Django】路由系统
    【Django】视图系统
    【Django】ORM操作#2
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/4529040.html
Copyright © 2011-2022 走看看