如果需要储存斜率或者判断一点是否在一条直线上,可以用向量储存斜率(如(x1-x0,y1-y0))此前提是要化简,即除去gcd,并且应对象限进行处理,如(-3,4)和(3,-4)是否在一条直线上,就需进行判断如果x<0的话可将x,y直接进行变号用set存储(set自动去重)
例题:消灭老鼠


#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
typedef pair<int, int>PII;
int gcd(int a, int b)
{
if (b == 0) return a;
return gcd(b, a%b);
}
int main()
{
int n, x0, y0;
cin >>n>> x0 >> y0;
set<PII>s;
while (n--)
{
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();
return 0;
}
该博客探讨了如何通过向量来储存直线的斜率并判断点是否在直线上,主要涉及数学和算法知识。代码示例中展示了如何通过化简向量并处理不同象限的情况来消除公因数,并使用集合(set)去重,从而确定直线上点的数量。
5386

被折叠的 条评论
为什么被折叠?



