首页 > 试题广场 >

水雷阵列

[编程题]水雷阵列
  • 热度指数:93 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
本题分两问,第一问占20分,第二问占10分。

一条小河(在笛卡尔坐标系中,用 y=0 和 y=100.0 表示其两岸),其中被敌人布了若干(N 个)电磁水雷,其感应半径为 R 。我方一只小船(不计体积和大小,看做一个点)只要和水雷的距离 L <= R 就会触发爆炸,那么(第1问)小船是否可以不被发现地闯过水雷阵?如果小船可以闯过水雷阵,那么(第二问)敌方最少还需要增补多少个(数量记为 M引爆半径为 D 的新型水雷才能对我方小船实时封锁?

如上图,假如只有1、2、3三个水雷(圆圈代表其触发范围),那结论为“否”(无法闯过);假如只有4、5、6、7四个水雷,那结论为“是”(可以闯过),如果新型水雷如上图和6号水雷相连的小圆,那么再需要1个就能封锁住小船了(M等于1)。


输入描述:
每个测试数据集包含 2~20 种情况,每种情况一行,每行包含 3+N*2 个数字(空格分隔),第1个数字为N表示有N个水雷(1<=N<=100),第2个数字为该组水雷的感应半径 R,第3个数字为新增水雷的感应半径 D,后面依次是N个水雷的中心坐标(xi, yi),其中0<yi<100.0(水雷当然都布在水里),0<xi<500.0。

共15个测试文件,其中前3个测试文件仅包含不超过2个水雷,前10个测试文件D等于0。


输出描述:
对应输入文件的情况,每种情况一行输出。
若D等于0,则输出 N(不能闯过)或 Y(可以闯过)
若D不等于0,则输出 N(不能闯过)或者数字 M(最小需要增补的水雷数)。
示例1

输入

3 10.0 0.0 13.3 14.2 15.7 25.0 33.3 59.8
1 70.0 0.0 40.5 60.5
2 30.0 30 40.5 35.5 65.6 64.5

输出

Y
N
2

说明

输入文件不明确给出行数,以文件结束为结束。
本题无需过分考虑浮点误差的影响。

备注:
注意:若D等于0,则无需计算第二问。