题目链接:http://lx.lanqiao.cn/problem.page?gpid=T798
代码:
#include<set>
#include<iostream>
using namespace std;
int main() {
pair<long double, long double>points;
bool istrue[1010];
int n;
//下面这个变量用来存储划分空间的变量
long long out = 0;
cin >> n;
//下面这个数组用来存储k,b。注意要将line设置为double类型,如果设置成int的话,只能对一半。因为下面算X坐标时,会涉及到除法。
double line[1010][2];
for (int i = 0; i < n; i++) {
cin >> line[i][0] >> line[i][1];
istrue[i] = false;
set<pair<long double, long double> >sum;
for (int j = 0; j < i; j++) {
if (istrue[j]) continue;
if (line[j][0] == line[i][0] && line[j][1] == line[i][1]) {
istrue[i] = true;
break;
}
if (line[j][0] == line[i][0])
continue;
else {
points.first = (-line[i][1] + line[j][1]) / (line[i][0] - line[j][0]);
points.second = line[i][0] * points.first + line[i][1];
sum.insert(points);
}
}
if (!istrue[i])out = out + sum.size() + 1;
}
cout << out + 1;
return 0;
}