1766: 弹珠游戏

内存限制:256 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:0 解决:0

题目描述

AC喜欢玩弹珠游戏。他将桌面看成一个平面,同时他在桌面上摆放了一些障碍物。障碍物分为2种:

(1)     圆形障碍物

(2)     线段障碍物

其中圆形障碍物是实心的,线段障碍物的宽度忽略,同时障碍物可以交叠。一开始AC选择一个位置,并以一个初速度v 将弹珠投出去。由于桌面是粗糙的,存在阻力,于是弹珠的速度大小每过单位时间(1)就减小 s ,我们假设弹珠碰到障碍物后无能量损失。AC想知道弹珠滚动了多久,最终停在了哪里,如果你解决了这个问题,或许AC会高兴地请你吃饭!

输入

数据的第一行是一个整数T,表示数据的组数。

之后T组数据,每组数据的第一行是一个整数n,表示障碍物的个数

之后n行,每一行的开始给出一个字符 S

(1)     S = A 表示障碍物为圆形,同时后面给出3个整数 x y r 表示它的圆心坐标以及半径;

(2)     S = B 表示障碍物为线段,同时后面给出4个整数 x0 y0 x1 y1 表示线段的两个不同端点。

之后4个浮点数 px py vx vy 分别表示弹珠的初始位置以及初始速度向量。

最后一个浮点数 s 表示阻力造成的每过单位时间(1)的速度大小的减小量。

对于数据:

(1)     T10

(2)     不存在重复的障碍物;

(3)     0 n 10

(4)     对于线段障碍物, 给出的2个端点必然不同。-100 x0,y0,x1,y1 100

(5)     对于圆形障碍物,-100 x,y 100, 0 r 100;

(6)     对于弹珠,保证初始位置不在任何障碍物内部或边界上, 弹珠半径足够小可以看成一个点,-1000.0 px,py,vx ,vy  1000.0;

(7)     对于单位速度减小量s, 保证s 0.0

(8)     碰触到边界也算碰撞(若运动轨迹完全经过某个线段,则不算碰撞)

(9)     碰撞时弹珠如果和大于1个的障碍接触那么直接反射(速度向量旋转180度,下面是几个例子),否则类似镜面反射(反射不花费时间):

 

(10) 注意不要输出 -0.00”。

输出

输出两个浮点数 x y, 表示弹珠停止的位置,保留2位小数(四舍五入)

之后输出一个浮点数 t, 表示弹珠滚动的时间() 保留2位小数(四舍五入)

 

样例输入 复制

3

2

A 0 0 1

B -1 0 1 0

2.0 0.0 -1.0 0.0

0.5

1

A 2 0 1

0 -1 1 1

0.1

1

A 2 0 1

0 -1 0 0

0.5

样例输出 复制

1.00 0.00

2.00

-5.07 6.07

14.14

0.00 -1.00

0.00