#293. 1292. [CTSC2009]魔幻花园
1292. [CTSC2009]魔幻花园
#1292. [CTSC2009]魔幻花园
题目描述
魔法师栋栋有一个美丽的魔幻花园,在花园里,栋栋种满各式各样的魔幻植物,花园里一年四季都开满着姹紫嫣红的鲜花。栋栋的朋友们都特别喜欢来花园里玩。 花园的浇灌系统是由栋栋特别设计的,栋栋用魔法在花园上空变出了n个喷头,这些喷头都连接着附近的圣水河。浇灌的时候,所有的喷头一起喷出一道道水流,水流在空中划出一道道美丽的弧线,最终正好浇灌到n棵最缺水的魔幻植物上。 栋栋把每个喷头都设在同一水平高度h。所有的喷头都是水平放置的,当水流从喷头喷出时,只有水平的速度(每个喷头的水平速度不一定相同)。魔幻花园里没有风,空气阻力可以忽略。所以在重力的影响下(魔幻花园的重力加速度为g),水流的轨迹是一条完美的抛物线。空间上的任意点都最多被三个喷头喷到,两条水流相交不会影响各自的轨迹。 近些年来魔幻花园附件新建了许多工厂,圣水河受到了污染,栋栋不想受污染的水影响到他的花园,所以他要使用魔法先净化一下浇灌的水。栋栋的魔法只能净化从喷头喷出来的水,他可以施魔法在空中的一个水平面形成一个凸多边形的滤水层,所有通过滤水层的水都会被净化,施这个魔法需要的能量和滤水层的面积成正比,每平方米滤水层需要1单位的魔法能量。栋栋想净化所有的水,他最少需要多少能量呢? 为了更好的描述问题,栋栋在花园建立起了一个三维的直角坐标系,以花园的西北角为坐标轴的原点,从原点向东是x轴的正方向,向南是y轴的正方向,向上是z轴的正方向。这样第i个喷头的位置可以用(xi,yi,h)来表示,而第j棵魔幻植物的位置可以用(xj’,yj’,0)来表示。
输入格式
第一行为两个实数h, g,表示喷头的高度和魔幻花园的重力加速度。第二行为整数n,表示有多少个喷头。 接下来n行,每行四个整数xi, yi, xi’, yi’,整数间使用一个空格分隔。表示第i个喷头的坐标是(xi, yi, h),它喷出的水正好浇灌到了(xi’, yi’, 0)位置的魔幻植物上。
输出格式
仅有一个实数,表示栋栋最少需要的能量,精确到小数点后4位。
样例
样例输入
【样例输入1】
36 2
3
99 100 105 100
101 100 95 100
100 99 100 105
【样例输入2】
10 9.8
3
0 0 0 0
1 0 100 0
0 50 0 1
样例输出
【样例输出1】
0.000
【样例说明1】
在高度为35的地方施魔法,此时所有的水流正好汇合到(100, 100, 35)这点,所以需要的能量为0。
【样例输出2】
25.0000
【样例说明2】
在高度为10的地方(即喷头处)施魔法,魔法形成一个直角三角形,三个点的坐标分别为:(0,0,10), (1,0,10), (0,50,10),面积为25.000,所以需要的魔法能量也为25.000。
数据范围与提示
【数据规模】
对于20%的数据,1≤ n ≤10
对于50%的数据,1≤ n ≤50
对于100%的数据,1≤n ≤100
0 < h ≤ 10000.0
0 < g ≤ 100.0
0 ≤ xi, yi, xi’, yi’ ≤ 1000
【提示】
水从喷头喷出到地面的过程可以看成一个平抛运动。平抛运动可以分解为向水平方向和竖直方向的两个分运动:
令L = (xi – xi’)2 + (yi – yi’)2,则
初始速度
t时刻的水平分速度:v平(t) = v0
t时刻的竖直分速度:v竖(t) = gt
t时刻的速度: