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>
int gcd(int a , int b)
{
return b ? gcd(b , a % b) : a;
}
int main()
{
int n , x0 , y0;
cin >> 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进行投诉反馈,一经查实,立即删除!