⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex.dpr

📁 tongji acm-online judge solution
💻 DPR
字号:
{$N+}
program Ural_1285(Input, Output);
const
    MaxD = 8;
type
    TData = Extended;
    TPoint = array[1..MaxD] of TData;

function ArcCos(X: TData): TData;
begin
    if X = 0 then
        ArcCos := Pi / 2
    else if X < 0 then
        ArcCos := ArcTan(Sqrt(1 - Sqr(X)) / X) + Pi
    else
        ArcCos := ArcTan(Sqrt(1 - Sqr(X)) / X);
end;

function GetDistance(A, B: TPoint): TData;
begin
    GetDistance := Sqrt(Sqr(B[1] - A[1]) + Sqr(B[2] - A[2]) + Sqr(B[3] - A[3]) +
        Sqr(B[4] - A[4]) + Sqr(B[5] - A[5]) + Sqr(B[6] - A[6]) + Sqr(B[7] - A[7]) + Sqr(B[8] - A[8]));
end;

procedure Main;
var
    A, B, C: TPoint;
    R, D1, D2, D, A0, A1, A2: TData;
begin
    Readln(A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[8]);
    Readln(B[1], B[2], B[3], B[4], B[5], B[6], B[7], B[8]);
    Readln(C[1], C[2], C[3], C[4], C[5], C[6], C[7], C[8]);
    Readln(R);
    D1 := GetDistance(C, A);
    D2 := GetDistance(C, B);
    D := GetDistance(B, A);
    A0 := ArcCos((Sqr(D1) + Sqr(D2) - Sqr(D)) / (2 * D1 * D2));
    A1 := ArcCos(R / D1);
    A2 := ArcCos(R / D2);
    if A0 - A1 - A2 <= 0 then
        Writeln(D: 0: 2)
    else
        Writeln((A0 - A1 - A2) * R + Sqrt(Sqr(D1) - Sqr(R)) + Sqrt(Sqr(D2) - Sqr(R)): 0: 2);
end;
begin
  {  Assign(Input, 'i.txt');
    Reset(Input);
    Assign(Output, 'o.txt');
    Rewrite(Output); }
    Main;
 {   Close(Input);
    Close(Output);   }
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -