#P17040. [SGU545] Cut the rope, another rope and so on!

[SGU545] Cut the rope, another rope and so on!

题目描述

屏幕顶部是一条水平直线,可视为 xx 轴。共有 nn 根不可伸缩、质量可忽略的绳子,第 ii 根绳子的一端固定在点 (xi,0)(x_i,0),长度为 lil_i。所有绳子的另一端连接在同一个无限小的球上。

初始时系统处于静止状态。某些绳子可能绷紧,也可能处于松弛状态。

接下来会依次剪断 n1n-1 根绳子。第一次剪绳发生在时刻 00。每次剪断一根绳子后,如果球发生运动,则等球重新静止后再剪下一根;如果剪断后球的位置完全不变,则立即继续剪下一根。

球运动在一种理想的完全黏滞介质中:在任意时刻,它都会沿着在当前约束下使重力势能下降最快的方向运动。例如,如果可以竖直向下运动,它就会竖直下落。球不会摆动,运动过程中纵坐标不会增大。

球始终以恒定速率 11 运动,因此运动距离等于经过的时间。

给定若干查询时刻 t1,t2,,tmt_1,t_2,\ldots,t_m,请输出这些时刻球的位置。

注意,一根尚未剪断的绳子并不要求始终绷紧。若球位于 (x,y)(x,y),第 ii 根绳子的约束为

(xxi)2+y2li2.(x-x_i)^2+y^2\le l_i^2.

当只剩最后一根绳子并且球静止后,球将永远保持在该位置。

输入格式

第一行包含两个整数 n,mn,m,其中 2n202\le n\le201m10001\le m\le1000

第二行包含 nn 个整数 x1,x2,,xnx_1,x_2,\ldots,x_n,其中 1xi2001\le x_i\le200,表示各绳子固定端的横坐标。

第三行包含 nn 个整数 l1,l2,,lnl_1,l_2,\ldots,l_n,其中 1li2001\le l_i\le200,表示各绳子的长度。

保证初始状态存在,即所有绳子的约束区域存在公共点。还保证不会出现两根绳子同时具有相同的固定点和相同的长度。

第四行包含 n1n-1 个互不相同的整数 p1,p2,,pn1p_1,p_2,\ldots,p_{n-1},表示剪绳顺序,第 jj 次剪断编号为 pjp_j 的绳子。

最后一行包含 mm 个严格递增且两两不同的实数 t1,t2,,tmt_1,t_2,\ldots,t_m,其中 0ti10000\le t_i\le1000。每个数的小数部分最多有三位。

输出格式

输出 mm 行。第 ii 行输出两个实数 x,yx,y,表示时刻 tit_i 球的位置。

每个坐标至少输出小数点后 55 位。若你的答案与标准答案的绝对误差不超过 10510^{-5},则认为正确。

坐标系中 yy 轴正方向向上。

样例 1

样例输入

3 4
1 1 3
5 10 20
1 2
2.5 10 16 20

样例输出

1.0000000000 -7.5000000000
1.0000000000 -15.0000000000
2.0972097000 -19.9796138520
3.0000000000 -20.0000000000

样例 2

样例输入

3 7
2 22 19
12 12 10
2 1
0 0.18 0.19 4.39 6 7 9

样例输出

12.0000000000 -6.6332495807
11.8993800085 -6.7824977292
11.8937244905 -6.7907448565
15.0867736994 -9.2025355158
16.6125973239 -9.7108345914
17.5939901889 -9.9006634329
19.0000000000 -10.0000000000