#include <iostream>
#include <istream>
#include <sstream>
#include <vector>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <cstring>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <numeric>
#include <chrono>
#include <ctime>
#include <cmath>
#include <cctype>
#include <string>
#include <cstdio>
#include <iomanip>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <functional>
#include <iterator>
using namespace std;
const int maxn = 10007;
struct Node {
double left;
double right;
bool operator<(const Node&input) {
if (left == input.left) return right < input.right;
return left < input.left;
}
}node[maxn];
int n, l;
double w, p, r;
double GetRangle(double input) {
double h = w / 2.0;
if (input < h) return 0;
return sqrt(input * input - h * h);
}
int main()
{
double w2,rangle;
while (cin >> n >> l >> w && n) {
int len = 0;
w2 = w / 2.0;
for (int i = 0; i < n; i++) {
cin >> p >> r;
if (r < w2) continue;
rangle = GetRangle(r);
node[len].left = p - rangle;
node[len++].right = p + rangle;
}
sort(node, node + len);
double sum = 0;
int ans = 0,first = 0;
while (sum < l) {
double shift = 0;
for (; first < len && node[first].left <= sum; first++) {
shift = max(shift, node[first].right - sum);
}
if (shift == 0) {
ans = -1;
break;
}
sum += shift;
ans++;
}
cout << ans << endl;
}
return 0;
}
uva10382
最新推荐文章于 2024-07-28 21:35:11 发布