分析:
1. 斜率相等时:
1)重边不会增加区域数
2)不是重边会增加一个区域
2. 斜率不同时:
与其他边每有一个交点就会增加一个区域数
代码如下:
#include<iostream>
#include<cstdio>
#include<set>
#define x first
#define y second
#define LL long long
using namespace std;
typedef pair<int,int> PII;
int a[1010][1010];
bool st[1010];
int main() {
int n;
LL ans = 0;
cin >> n;
for(int i=1;i<=n;i++) {
set<PII> points;
PII point;
cin >> a[i][0] >> a[i][1];
for(int j=1;j<i;j++) {
if(st[j]) continue;
//斜率相等
if(a[i][0]==a[j][0]) {
//判断为重边
if(a[i][1]==a[j][1]) {
st[i]=true;
break;
}
//平行
else continue;
}
//统计交点个数
point.x = (a[j][1]-a[i][1])/(a[i][0]-a[j][0]);
point.y = a[i][0]*point.x+a[i][1];
points.insert(point);
}
if(!st[i])
ans += points.size()+1;
}
cout<<ans+1<<endl;
return 0;
}