p2403_计算几何.cpp

来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· C++ 代码 · 共 50 行

CPP
50
字号
#include <stdio.h>
#include <math.h>
#include <complex>
#include <algorithm>

using namespace std;

typedef complex <double> TPos;

int     N;
TPos    Data [20] [20];
double  Start [20];

bool    init ();
void    solve ();

main ()
{
     while ( init () )
           solve ();
}

void solve ()
{
     TPos  Tmp;
     double    l;
     for ( int i = 0; N - i > 1; i ++ )
         for ( int j = 0; j + 1 < N - i; j ++ ) {
             Tmp = Data [i] [j + 1] - Data [i] [j];
             l = sqrt ( norm ( Tmp ) ) / 4;
             Tmp *= TPos ( l , sqrt ( 1 - l * l ) );
             Tmp /= l * 2;
             Data [i + 1] [j] = Data [i] [j] + Tmp;
         }
     printf ( "%.4lf %.4lf\n" , Data [N - 1] [0].real () , Data [N - 1] [0].imag () );
}

bool init ()
{
     scanf ( "%d" , &N );
     double  x , y;
     if ( N == 0 ) return false;
     for ( int i = 0; i < N; i ++ )
         scanf ( "%lf" , &Start [i] );
     sort ( Start , Start + N );
     for ( int i = 0; i < N; i ++ )
         Data [0] [i] = TPos ( Start [i] , 1.0 );
     return true;
}

⌨️ 快捷键说明

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