题目大意:n个点,求能连成多少不平行的直线
题解:枚举两点,统计不同斜率即可,注意斜率不存在
为了防止精度误差,直接用pair+set或排序去重就可以了
我的收获:pair特殊应用
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
using namespace std;
const int M=1005;
#define pii pair<int,int>
#define x first
#define y second
int n;
pii a[M],ans[M*M];
void work()
{
int tot=0;
for(int i=1;i<=n;i++)
for(int j=1;j<i;j++)
{
int lx=a[i].x-a[j].x,ly=a[i].y-a[j].y;
int d=__gcd(lx,ly);lx/=d,ly/=d;
ans[++tot]=make_pair(lx,ly);
}
sort(ans+1,ans+tot+1);
int nn=unique(ans+1,ans+tot+1)-(ans+1);
printf("%d",nn);
}
void init()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y);
sort(a+1,a+n+1);
}
int main()
{
init();
work();
return 0;
}