《AtCoder Beginner Contest 168 E》思路详解
统计相同垂直的直线。
看成向量后,发现相互垂直的就满足这个条件.
假如当前线段为a,b,c,d,e,f.
我们把互相垂直的看成一个整体
a
b
c-d
e-f.
考虑用插入的方案形成一个最终的结果序列。
对于a的插入,因为没有垂直的可以影响,那么如果a的个数为x个。
a的插入方案数为2^x.对于每个a选或者不选.
对于b也是一样的思路。
当c-d时,因为两个线段会垂直影响,那么只能选择两个集合中的一个.
假设c x个,d y个
那么方案数就是2^x+2^y-1;//.显然两个都不选的状态多算了一次,所以后面-1.
最后的结果排列就是所有子集合的方案数的乘积.
代码思路:
对于c的判断结束后,保证不重复,那么就令d的map = 0.
然后存直线的时候除一个gcd(a,b),让它成为最简分数形式.
Code:咕咕咕