寄蒜几盒
题号:NC14823
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

在二维平面上有n条直线,这些直线会将平面划分成若干个区域。给定m个点,求每个点所在的区域的面积。
聪明的读者会发现有些点所在的区域面积是无穷大的。R姓出题人早就想到了这一点,所以他给出了一个实数L,由额外的四条直线x=L,x=-L,y=L,y=-L 框定了一个有限的平面区域,并且所有的询问点都在这个框定的平面区域内部。
聪明绝顶的读者会发现如果询问点恰好落在某条直线上或者离某条直线的距离非常近,那么精度误差会严重影响答案。R姓出题人早就想到了这一点,所以在他造的数据中,任意一个询问点距离任意一条直线的距离大于10-7

输入描述:

第一行两个正整数n,m和一个正实数L。
接下来n行每行三个实数A,B,C,表示这条直线的方程为Ax+By+C=0
接下来m行,第i行两个实数xi,yi,表示第i个点的坐标。

输出描述:

输出m行,每行一个实数,第i行输出的实数表示第i个点所在的区域的面积。保留两位小数。
示例1

输入

复制
2 4 3
1 1 -1
-1 1 -1
0 2
-2 1
2 1
0 0

输出

复制
4.00
8.50
8.50
15.00

说明

对于100%的数据,n<=500,m<=100000
对于100%的数据,输入数据的绝对值<=107,且输入数据最多保留两位小数。

备注:

0 ≤ Mij ≤ 109,1 ≤ x ≤ n,1 ≤ y ≤ m