题目链接
题解
待补充
代码
/*
* @Date: 2021-12-08 08:31:50
* @LastEditors: fuchaoxin
* @LastEditTime: 2021-12-08 12:21:39
* @FilePath: \Visual Studio\c++\highway.cpp
*/
#include <bits/stdc++.h>
#include <cmath>
using namespace std;
int main(void)
{
int L, D, N;
while (~scanf("%d%d%d", &L, &D, &N))
{
int intervals[N][2];
for (int i = 0; i < N; i++)
{
int x, y;
scanf("%d%d", &x, &y);
int r = (int)pow(D * D - y * y, 0.5);
intervals[i][0] = fmax(0, x - r); // left
intervals[i][1] = fmin(L, x + r); // right
}
// display
// for (int i = 0; i < N; i++)
// {
// printf("(%d, %d) ", intervals[i][0], intervals[i][1]);
// }
// greedy
int ans = 1;
int left = intervals[0][0], right = intervals[0][1];
for (int i = 1; i < N; i++)
{
if (intervals[i][0] <= right)
{
left = fmax(left, intervals[i][0]);
right = fmin(right, intervals[i][1]);
}
else
{
left = intervals[i][0];
right = intervals[i][1];
ans++;
}
}
printf("%d\n", ans);
}
return 0;
}