蓝桥杯ACwing习题

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
#include
#include
#include

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 >> n >> x0 >> y0;
    
    set> 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;
}

你可能感兴趣的:(蓝桥杯,算法,职场和发展)