原题链接
算法分析
根据高中数学学过的知识,如果两点在直线的同一侧,则其代入方程的值正负相同。据此有如下算法:
(1)取某一点,不妨设为A类型的点,代入当前所需验证的直线方程,获得一个标定值,暂记为standard。
(2)将另一个A类型的点代入直线方程,得一个值,暂记为temp。如果两点在直线的同一边,则standard * temp > 0;遍历所有的A类型点。若有任意一点使得standard * temp < 0,则意味着该条直线无法将所有A类型点分割到同一侧,输出“No”,结束本次算法。
(3)沿用(1)中的standard值对B类型的点进行比较,若对于所有B类型的点,都有standard * temp < 0,输出“Yes”;否则,输出“No”,结束本次算法。
(4)反复进行(1)~(3)直至验证所有的直线。
ps. 如果采用C++编写,上述standard和temp变量务必定义为long long类型,如果是int就WA了(亲测)(菜哭)
以下是AC代码: