本文介绍: / (-3 , 3) 在第第二象限 对应直线在第四象限(3 , -3) 所以给他取一个 x = -x , y = –y 即可。// 我们需要 x / gcd(x , y) , y / gcd(y) 这样就可以当前坐标约分了,// 就是表示为一个唯一整数 然后我们需要注意的是 这个一条直线 , 所以当 x < 0 的时候。// 我们需要知道的是 当我们求出当前这个点的坐标表示 (x – x0 , y -y0)// 然后我们就可以想到 set 存一下 , 然后去重就可以了。

https://www.acwing.com/problem/content/description/4312/

// 首先 我们可以很容易的知道这道题判断多少个斜率 
// 在直接一点就是将所有斜率相等的认为是一个就可以了
// 然后我们就可以想到 set 存一下 , 然后去重就可以了
// 我们需要知道的是 当我们求出当前这个点的坐标表示 (x – x0 , y -y0)
// 我们还需要 x / gcd(x , y) , y / gcd(y) 这样就可以将当前坐标约分了,
// 就是表示为一个唯一整数 然后我们需要注意的是 这个是一条直线 , 所以当 x < 0 的时候
// (-3 , 3) 在第第二象限 对应直线在第四象限(3 , -3) 所以给他取一个 x = -x , y = -y 即可

#include <iostream>
#include <cstring>
#include <algorithm>
#include <set&gt;

using namespace std;

const int N = 1010;

int gcd(int a , int b)
{
    return b ? gcd(b , a % b) : a;
}

int main()
{
    int n , x0 , y0;
    cin &gt;> n >> x0 >> y0;
    
    set<pair<int,int>> S;
    for(int i = 0 ; i < n ; i ++)
    {
        int x, y;
        cin >> x >> y;
        x -= x0 , y -= y0;
        int d = gcd(x , y);
        x /= d , y /= d;
        if(x < 0) x = -x , y = -y;
        S.insert({x , y});
    }
    
    cout << S.size() << endl;
    
    return 0;
}

原文地址:https://blog.csdn.net/m0_63699273/article/details/134760654

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_38518.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注