平面上有 NN 条直线,其中第 ii 条直线是 y = A_i \times x + B_iy=Ai×x+Bi。
请计算这些直线将平面分成了几个部分。
输入描述
第一行包含一个整数 NN。
以下 NN 行,每行包含两个整数 A_i, B_iAi,Bi。
其中,1 \leq N \leq 1000, −10^5 \leq A_i,B_i \leq 10^51≤N≤1000,−105≤Ai,Bi≤105。
输出描述
一个整数代表答案。
输入输出样例
示例
3
1 1
2 2
3 3
6
新增平面个数 = 直线与之前所有直线交点个数+1;
用set容器去重
比较好的题解 :::https://blog.csdn.net/weixin_46266058/article/details/123441487
ACCODE:
#include <iostream>
#include <algorithm>
#include <set>
#include <cstring>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
#define N 500
typedef pair<int,int> PII;
typedef pair<double,double> PDD;
int n;
int A[1010],B[1010];
int main(){
cin>>n;
set<PII>st;
for(int i=0,a,b;i<n;i++){
cin>>a>>b;
st.insert(PII(a,b));
}
int cnt=0;
for(auto p:st)A[cnt]=p.first,B[cnt++]=p.second;
int ans=2;
for(int i=1;i<st.size();i++){//必须记录下来
set<PDD>dian;
for(int j=i-1;j>=0;j--){
int a1=A[i],b1=B[i];
int a2=A[j],b2=B[j];
if(a1==a2)continue;
dian.insert(PDD((b2-b1)*1.0/(a1-a2),((a1*b2-a2*b1)*1.0/(a1-a2))));
}
ans+=dian.size()+1;
}
cout<<ans;
}