最初平面个数为1
当加入一条直线时,若该直线与之前的不重合,则其增加的平面个数至少为1
与之前的直线比较,计算出所有的交点,个数+1即为这条直线的所有贡献
#include<iostream>
#include<map>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
typedef pair<long double,long double> PDD;
const int N=1e5+5;
map<PII,bool> mp;
ll res=1;
PII g[N];
int main()
{
int n;cin>>n;
for(int i=1;i<=n;i++)
{
int a,b;cin>>a>>b;
g[i]={a,b};
}
for(int i=1;i<=n;i++)
{
int a,b;a=g[i].first;b=g[i].second;
if(mp[{a,b}]) continue;
res++;
map<PDD,bool> point;
for(int j=1;j<i;j++)
{
int a1=g[j].first,b1=g[j].second;
if(a==a1) continue;
long double x=(b-b1)*1.0/(a-a1);
long double y=(2*a*b-a*b1-a1*b)*1.0/(a-a1);
if(!point[{x,y}])
{
res++;
point[{x,y}]=true;
}
}
mp[{a,b}]=true;
}
cout<<res;
}