CF420E Playing the ball
题目描述
程序员不能整天坐着编程。有时候,起身休息一下,和同事们聊聊天,甚至玩一玩,是个不错的主意。F 公司里的程序员们有他们最喜欢的球类游戏。
让我们在带有笛卡尔坐标系的平面上想象这个游戏。点 $(0, 0)$ 处有一名玩家,他可以选择任意方向并将球朝该方向抛出。球第一次接触平面的位置距离玩家的原始位置为 $d$,并在相同方向上继续飞行。当球第一次接触平面后,会继续前进,并在距离玩家原始位置 $2·d$ 处再次接触平面,依此类推(球始终沿着选定方向,在每隔 $d$ 个单位距离的位置接触平面)。F 公司的程序员们都很强壮,因此球能够飞到无限远。
平面上画着 $n$ 个圆。如果球击打平面时,恰好落在画好的某个圆的内部或边界上,玩家就获得一分。球在一次击打中可以同时击中多个圆,并且每击中一个圆就得一分(如果球在多次击打中击中某个圆 $x$ 次,则共获得 $x$ 分)。请计算玩家将球朝任意方向抛出时,最多可以获得多少分。注意,抛出的方向可以为任意实数坐标。
输入格式
第一行包含两个用空格分隔的整数 $n$ 和 $d$,其中 $1 \leq n \leq 2 \times 10^{4}$,$5 \leq d \leq 10$。
接下来的 $n$ 行,每行包含三个用空格分隔的整数 $x_{i}$、$y_{i}$、$r_{i}$ $(-10000 \leq x_{i}, y_{i} \leq 10000; 1 \leq r_{i} \leq 50)$,表示第 $i$ 个圆的圆心坐标和半径。
保证点 $(0, 0)$ 不在任何一个圆的内部或边界上。
输出格式
输出一个整数,表示玩家最多可以获得的分数。
说明/提示
由 ChatGPT 5 翻译