# [蓝桥杯 2020 省 B2] 平面切分
## 题目描述
平面上有 $N$ 条直线, 其中第 $i$ 条直线是 $y=A_{i} \cdot x+B_{i}$ 。
请计算这些直线将平面分成了几个部分。
## 输入格式
第一行包含一个整数 $N$。
以下 $\mathrm{N}$ 行, 每行包含两个整数 $A_{i}, B_{i}$。
## 输出格式
一个整数代表答案。
## 样例 #1
### 样例输入 #1
```
3
1 1
2 2
3 3
```
### 样例输出 #1
```
6
```
## 提示
对于 $50 \%$ 的评测用例, $1 \leq N \leq 4,-10 \leq A_{i}, B_{i} \leq 10$。
对于所有评测用例, $1 \leq N \leq 1000,-10^5 \leq A_{i}, B_{i} \leq 10^5$。
蓝桥杯 2020 第二轮省赛 B 组 I 题
import java.util.*;
class Main
{
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int ans=0;
int length=sc.nextInt();
List<Integer> arr1=new ArrayList<>();
List<Integer> arr2=new ArrayList<>();
for (int i=0;i<length;i++)
{
arr1.add(sc.nextInt());
arr2.add(sc.nextInt());
int now1=arr1.get(i);
int now2=arr2.get(i);
if (i==0)
{
ans=2;
continue;
}
int node=Integer.MIN_VALUE;
List<Double[]> list=new ArrayList<>();
for (int j=0;j<i;j++)
{
int pre1=arr1.get(j);
int pre2=arr2.get(j);
if (pre1==now1&&pre2==now2)
{
node=Integer.MIN_VALUE;
break;
}
else if (pre1==now1)
{
if (node==Integer.MIN_VALUE)
{
node=0;
}
}
else
{
if (node==Integer.MIN_VALUE)
{
node=0;
}
double x=(now2-pre2)*1.0/(pre1-now1);
double y=now1*x+now2;
Double[] now=new Double[] {x,y};
boolean flag=true;
for (Double[] m:list)
{
if (Arrays.equals(m, now))
{
flag=false;
break;
}
}
if (flag)
{
list.add(now);
}
}
}
// for (Integer[] m:list)
// {
// System.out.println(Arrays.toString(m));
// }
if (node==0)
{
ans+=list.size()+1;
}
// System.out.println("i:"+i+"ans:"+ans);
// System.out.println("i:"+i);
// System.out.println(arr1.toString());
// System.out.println(arr2.toString());
// System.out.println(ans);
}
System.out.println(ans);
//System.out.println(Integer.MAX_VALUE);
sc.close();
}
}