poj 2074 Line of Sight
2012-07-11 17:52
381 查看
这个题就是求无论你站在家的那个地方都能看到财产的最大值;
这个题可以从正面做,直接用叉积求出最大值;
View Code
这个题可以从正面做,直接用叉积求出最大值;
View Code
#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<cstring> using namespace std; class Line { public: double x1,x2,y; }line[224]; Line house,pro; int dcmp( double x ) { if( fabs( x ) < 1.0e-12 ) return 0; if( x < 0 ) return -1; return 1; } bool cmp( Line a, Line b ) { if( a.x1 < b.x1 ) return true; else if( dcmp( a.x1 - b.x1)==0 && a.y < b.y ) return true; return false; } double Max( double a , double b) { return a > b ? a : b; } double Solve( int n ) { Line L[224]={0}; double A1,B,A2; for( int i = 0 ; i < n ; i ++ ) { A1 = house.x2 - line[i].x1; B = house.y - line[i].y; A2 = house.x1 - line[i].x2; L[i].x1 = ( pro.y - house.y )*A1/B + house.x2; L[i].x2 = ( pro.y - house.y )*A2/B + house.x1; } sort( L , L + n , cmp ); double ans = 0; if( L[0].x1 > pro.x1 ) ans = L[0].x1 - pro.x1; double t = L[0].x2; for( int i = 1 ; i < n ; i ++ ) { if( L[i].x1 <= t ) t = Max( t , L[i].x2 ); else { ans = Max( ans , L[i].x1 - t ); t = L[i].x2; } } ans = Max( ans , pro.x2 - t ); return ans; } int main( ) { while( scanf( "%lf %lf %lf",&house.x1,&house.x2,&house.y )==3) { int n,flag = 0,cnt=0; if(dcmp(house.x1)==0&&dcmp(house.x2)==0&&dcmp(house.y)==0 ) break; scanf( "%lf %lf %lf",&pro.x1, &pro.x2,&pro.y ); scanf( "%d",&n ); for( int i = 0; i < n ; i++ ) { scanf( "%lf %lf %lf",&line[i].x1,&line[i].x2,&line[i].y ); if( dcmp(line[i].y - house.y) ==0 ) { if( dcmp( line[i].x1 - house.x2 ) <= 0 && dcmp( line[i].x2 - house.x1 ) >= 0 ) flag = 1; } else if( line[i].y < house.y && line[i].y > pro.y )line[cnt++] = line[i]; } if( flag ) printf( "No View\n" ); else { if( cnt == 0 ) printf( "%.2f\n",pro.x2-pro.x1 ); else { sort( line , line + cnt , cmp ); double view = Solve( cnt ); if( dcmp( view )==0 ) printf( "No View\n" ); else printf( "%.2f\n",view ); } } } //system( "pause" ); return 0; }
相关文章推荐
- poj 2074 Line of Sight(视线问题,求直线与线段的交点及判断相交)
- POJ 2074 Line of Sight(判线段与直线相交)
- poj 2074 Line of Sight
- poj 2074 Line of Sight
- 简单几何(直线求交点) POJ 2074 Line of Sight
- poj 2074 Line of Sight (计算几何,细节题)
- POJ 2074 Line of Sight 直线交
- POJ 2074 Line of Sight 直线交
- POJ 2074 Line of Sight
- Poj 2074 Line of Sight
- POJ 2074 Line of Sight
- [poj] 2074 Line of Sight || 直线相交求交点
- poj 2074 Line of Sight(计算几何)
- POJ 2074 Line of Sight(求交点)
- POJ 2074 Line of Sight
- POJ 2074 Line of Sight
- POJ 2074 Line of Sight
- POJ 2074 Line of Sight 直线相交+线段覆盖
- poj 2074 Line of Sight
- Poj 2074 Line of Sight