• 题目1548:平面上的点


    描述:

    给定平面上的n个点,任意做一条直线,求至多能有几个点恰好落在直线上。

    输入:

    包含多组测试数据,每组测试数据由一个整数n(0<=n<=100)开始,代表平面上点的个数。
    接下去n行每行给出一个点的坐标(x,y),x、y的绝对值均小于等于100。

    输出:

    对于每组测试数据,输出一个整数,表示至多能有几个点恰好落在直线上。

    样例输入:
    2
    0 0
    1 1
    4
    0 0
    1 1
    2 2 
    3 6
    样例输出:
    2
    3

    //分数
    struct Node{
           double zi ;
           double mu ;
           Node(){} ;
           Node(double z , double m):zi(z),mu(m){} ;
           friend bool operator < (const Node A , const Node B){
                  return A.zi * B.mu < A.mu * B.zi ;
           }
           friend bool operator == (const Node A , const Node B){
                  return A.zi * B.mu == A.mu * B.zi ;
           }
    };
    
    struct Point {
           double x ;
           double y ;
    }p[108];
    
    int n ;
    
    //固定一个点i必须出现,那么斜率相同的点就在一条直线上了,统计最大值 。
    int get_max(int id){  
        int i ;
        double x = p[id].x ;
        double y = p[id].y ;
        int ans = 0 ;
        map<Node , int> mp ;  //Node 为分数。 做分数->int的映射。
        map<Node , int> ::iterator it ;
        mp.clear() ;
        for(i = 1 ; i <= n ; i++){
            if(i == id)
              continue ;
            if(p[i].x == x)
              ans++ ;
            else
              mp[Node(p[i].y - y , p[i].x - x)]++ ;
        }
        for(it = mp.begin() ; it != mp.end() ; it++)
           ans = max(ans , it->second) ;
        return ans + 1 ;
    }
    
    int main(){
        int  i , ans ;
        while(cin>>n){
            for(i = 1 ; i <= n ; i++)
                cin>>p[i].x>>p[i].y ;
            ans = 0 ;
            for(i = 1 ; i <= n ; i++)
                ans = max(ans , get_max(i)) ;
            cout<<ans<<endl ;
        }
        return 0 ;
    }
    

      

  • 相关阅读:
    HDU 3389 Game (阶梯博弈)
    国内操作系统OS分析(上)
    激光雷达应用技术分析
    构建深度学习框架运行平台
    GitHub上YOLOv5开源代码的训练数据定义
    GitHub上开源的YOLOv5
    深度学习调用TensorFlow、PyTorch等框架
    CUDA C 纹理提取Texture Fetching
    CPU,GPU,GPGPU
    毫米波RADAR与LIDAR探秘
  • 原文地址:https://www.cnblogs.com/liyangtianmen/p/3573700.html
Copyright © 2020-2023  润新知