《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:咕咕咕

posted @ 2020-05-20 14:24  levill  阅读(169)  评论(0编辑  收藏  举报