題目描述
在座標紙上有N個不重合的點,兩兩可以連一個線段並延伸成直線,請問在這些直線裏最多能選出多少條使得他們兩兩不平行也不重合。
輸入描述:
第1行: 輸入1個正整數:N
第2…N+1行:第i+1行是兩個用空格隔開的整數,爲點i的座標(Xi,Yi)
輸出描述:
輸出1個整數,爲最多的互不平行的直線數目。
示例1
輸入
3
1 0
-2 0
0 0
輸出
1
思路:就是把所有不同的斜率求出來,另外判斷一下斜率爲0 的情況
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+100;
using namespace std;
struct point
{
int x, y;
}p[maxn], pp;
int i, j, n;
map<double, int> XL;
int main()
{
cin >> n;
long long int ans = 0;
for (i = 1; i <= n; i++)
{
cin >> p[i].x >> p[i].y;
}
ans = 0;
for (i = 1; i <= n; i++)
{
for (j = i + 1; j <= n; j++)
{
pp.x = p[i].x - p[j].x;
pp.y = p[i].y - p[j].y;
if (pp.y == 0)
{
ans++;
}
else
{
XL[(double)pp.x / pp.y]++;
}
}
}
if (ans == 0)
{
cout <<XL.size()<< endl;
}
else
{
cout << XL.size() + 1 << endl;
}
}