题意:每一步可以走 $r$ 的距离,问到终点至少走多少步
因为两个$r$可以组成 $ (0, 2 \times r) $ 的范围的距离
当距离小于 $ 2r $ 时 如果不等于 $r $,答案就是$ 2r $, 当距离大于$2r$ 时,答案就是
$$ \lceil \frac{dis}{r} \rceil $$
注意浮点型精度问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; typedef long long ll;
const double eps = 1e-8;
ll r, x, y;
int sgn(int x) { if(fabs(x) <= eps) { return 0; } else if(x < 0) { return -1; } return 1; }
int main() { cin >> r >> x >> y; double dis = sqrt(x*x + y*y); int ans = ceil(dis / r); if(sgn(dis - (double)r) == 0) { puts("1"); } else if(sgn(dis - 2.0*r) == -1) { puts("2"); } else { printf("%lld\n", ans); }
return 0; }
|