QOJ.ac

QOJ

Time Limit: 3 s Memory Limit: 512 MB Total points: 100

#854. 射手ヴラド

Statistics

Vladは、並外れた冒険で知られる模範的な学生であり、その冒険の多くはプログラミングコンテストの課題として残されてきました。しかし、そのような落ち着きのない生活に、Vladは少し疲れ果ててしまいました。「どこへ行っても問題ばかりだ!もううんざりだ!」と彼は宣言し、大学を去ってビェシュチャディ山地へと向かいました。

Vladは小さな小屋を借り、休暇の最初の数ヶ月をそこで過ごしました。しかし、すぐに退屈が彼を襲い始めたため、Vladは趣味を見つけることにしました。彼は弓と数本の矢を買い、毎日のアーチェリーの練習を始めました。数ヶ月の厳しい訓練の後、Vladは非常に満足のいく結果に達し、秒速 $C$ メートルという驚異的な速さで矢を放つことができるようになりました。しかし、周りに誰もいない中でそのような成果を楽しむのは難しいことでした。

「これを見てくれ!ここに立って、あの木々をすべて飛び越えるくらい速く矢を放ってみせるよ!」と、Vladは彼を訪ねてきた若いプログラマーであるあなたに向かって叫びました。Vladは弓を引き絞り、最初の矢を放ちました。矢の羽が空中で揺れ、矢尻が空に輝いていましたが……矢は木に当たってしまいました。「待ってくれ、もう一度試させてくれ!」

2回目の挑戦は1回目よりもさらに壮観でしたが、この矢も森の外へ出ることはできませんでした。「最後にもう一度だけ!」とVladが叫び、再び袋に手を伸ばしたとき、あなたは彼を止めました。Vladが矢を使い果たしてしまうことを恐れたあなたは、彼が狙うべき最適な角度を見つけることにしました。そして、あなたはバックパックからコンピュータを取り出し、UJ TCSスタイルでこの問題を解く準備をしました。

Vladはデカルト平面上の点 $(0, 0)$ に立っています。点 $(0, 1)$ と $(1, 0)$ はどちらもVladからちょうど1メートルの距離にあります。$N$ 本の木が $1$ から $N$ まで番号付けされており、木 $i$ は点 $(x_i, 0)$ と点 $(x_i, y_i)$ を結ぶ垂直な線分で表されます($x_i, y_i$ は正の整数)。Vladが角度 $\alpha$ で矢を放つと、矢の初期水平速度は $v_x = C \cdot \cos(\alpha)$、初期垂直速度は $v_y = C \cdot \sin(\alpha)$ となります。矢は空気抵抗の影響を受けず、その軌道は放物線となります(正確には、水平速度 $v_x$ は飛行中ずっと一定であり、垂直速度 $v_y$ は重力加速度 $g = 10 \, \text{m/s}^2$ により毎秒減少します)。Vladの目的は、放った矢の軌道がどの木(より具体的にはそれらを表す線分)とも交差しないようにすることです。さらに、矢の軌道は、どの木の $x$ 座標よりも大きい $x$ 座標を持つ点で $x$ 軸と交差しなければなりません。

これらの条件を満たす $\tan(\alpha)$ の値を一つ出力してください。

入力

入力の最初の行にはテストケースの数 $z$ が含まれます。続いて各テストケースの説明が続きます。

各ケースの最初の行は、Vladの矢の速度を表す整数 $1 \le C \le 10^9$ です。 各ケースの2行目は、木の数を表す整数 $1 \le N \le 100\,000$ です。 各ケースの続く $N$ 行には、それぞれ2つの整数 $x_i, y_i$ ($1 \le x_i, y_i \le 10^9$) が含まれます。$i$ 番目の木は、点 $(x_i, 0)$ と点 $(x_i, y_i)$ を結ぶ垂直な線分で表されます。

すべてのテストケースにおける $N$ の合計は $300\,000$ を超えません。

出力

各ケースについて、小数点以下3桁の数値を一つ出力してください。これは、正しい $\tan(\alpha)$ の値のいずれかを誤差 $10^{-3}$ 以内で近似したものである必要があります。解は常に存在し、正しい $\tan(\alpha)$ の値は少なくとも長さ $10^{-2}$ の解の区間に含まれていると仮定して構いません。

入出力例

入力 1

3
5
1
1 1
5
1
1 1
13
1
7 7

出力 1

2.000
3.000
2.429

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.