#include using namespace std; #define int ll using ll = long long; typedef double ld; const ld DINF = 1e18; const ld pi = acos(-1.0); const ld eps = 1e-9; #define sq(x) ((x)*(x)) bool eq(ld a, ld b) { return abs(a - b) <= eps; } struct pt { // ponto ld x, y; pt(ld x_ = 0, ld y_ = 0) : x(x_), y(y_) {} bool operator < (const pt p) const { if (!eq(x, p.x)) return x < p.x; if (!eq(y, p.y)) return y < p.y; return 0; } bool operator == (const pt p) const { return eq(x, p.x) and eq(y, p.y); } pt operator + (const pt p) const { return pt(x+p.x, y+p.y); } pt operator - (const pt p) const { return pt(x-p.x, y-p.y); } pt operator * (const ld c) const { return pt(x*c , y*c ); } pt operator / (const ld c) const { return pt(x/c , y/c ); } ld operator * (const pt p) const { return x*p.x + y*p.y; } ld operator ^ (const pt p) const { return x*p.y - y*p.x; } friend istream& operator >> (istream& in, pt& p) { return in >> p.x >> p.y; } }; vector circ_line_inter(pt a, pt b, pt c, ld r) { // intersecao da circunf (c, r) e reta ab vector ret; b = b-a, a = a-c; ld A = b*b; ld B = a*b; ld C = a*a - r*r; ld D = B*B - A*C; if (D < -eps) return ret; ret.push_back(c+a+b*(-B+sqrt(D+eps))/A); if (D > eps) ret.push_back(c+a+b*(-B-sqrt(D))/A); return ret; } int32_t main() { cin.tie(0)->sync_with_stdio(0); int x, y, r; cin >> x >> y >> r; if (x) x = x * x / abs(x); if (y) y = y * y / abs(y); int lo = x + y, hi = 1e9; while (lo < hi) { int mid = (lo + hi) / 2; pt a = {0, mid}, b = {mid, 0}; auto v = circ_line_inter(a, b, pt{x, y}, r); if (v.empty()) hi = mid; else lo = mid + 1; } cout << lo << endl; }