#include <bits/stdc++.h> using namespace std; struct point { double x, y; point(double A, double B) { x = A, y = B; } point() = default; }; struct line { point point_A, point_B; line(point A, point B) { point_A = A, point_B = B; } line() = default; }; struct Circle { point O; int r; Circle(point A, int B) { O = A, r = B; } Circle() = default; }; double getDistance(const Circle& circle, const line& l) { // 请在这里实现你的代码 double ox = circle.O.x, oy = circle.O.y; double r = circle.r; double x1 = l.point_A.x, y1 = l.point_A.y; double x2 = l.point_B.x, y2 = l.point_B.y; // 计算直线方程的参数 A, B, C double A = y2 - y1; double B = x1 - x2; double C = x2 * y1 - x1 * y2; // 计算圆心到直线的距离 d double d = abs(A * ox + B * oy + C) / sqrt(A * A + B * B); // 计算两点间的距离 if (d < r) { return 2 * sqrt(r * r - d * d); } else if (d == r) { return 0.0; } // 根据题目备注,直线与圆不相离,所以不需要处理 d > r 的情况 return 0.0; } int main() { double ox, oy, r; double x1, y1, x2, y2; cin >> ox >> oy >> r; cin >> x1 >> y1 >> x2 >> y2; point center(ox, oy); Circle circle(center, (int)r); point p1(x1, y1); point p2(x2, y2); line l(p1, p2); double result = getDistance(circle, l); cout << fixed << setprecision(6) << result << endl; return 0; }