📄 toj_2942_test.cpp
字号:
#include<cstdio>#include<cmath>#include<cstdlib>#include<algorithm>using namespace std;#define MINNUM 1e-10#define MAXNUM 10010struct Point { double x; double y;};Point p[ 2 ][ MAXNUM ];int n , m;double minDis;inline int sigDbl( double x ){ if( fabs( x ) < MINNUM ) return 0; else if( x > 0 ) return 1; else return -1;}void readP( int aP , int num ){ int i , j; for( i = 0; i < num; i++ ) scanf( "%lf%lf" , &p[ aP ][ i ].x , &p[ aP ][ i ].y );}inline double dotMul( Point a, Point b ){ return ( a.x * b.x + a.y * b.y );}inline Point vec( Point a , Point b ){ Point ab; ab.x = b.x - a.x; ab.y = b.y - a.y; return ab;}inline double vecLen( Point a ){ return sqrt( a.x * a.x + a.y * a.y );}inline double area( Point a , Point b ){ return fabs( a.x * b.y - b.x * a.y );}inline double findDis( Point a , Point b , Point c ){ double s1 , s2; Point ba , bc , ca; ba = vec( b , a ); bc = vec( b , c ); ca = vec( c , a ); s1 = dotMul( ba , bc ); s2 = - dotMul( ca , bc ); if( sigDbl( s1 ) >= 0 && sigDbl( s2 ) >= 0 ){ return area( ba, ca ) / 2.0 / vecLen( bc ); } else return min( vecLen( ba ) , vecLen( ca ) );/* else if ( sigDbl( s1 ) < 0 && sigDbl( s2 ) > 0 ) return vecLen( ba ); else return vecLen( ca );*/}int main(){ int i , j; while ( scanf( "%d%d" , &n , &m ) && n && m ){ readP( 0 , n ); readP( 1 , m ); for( i = 0; i < n; i++ ) for( j = 0; j < m; j++ ) printf( "%d%d" , findDis
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -