PKU2074

#include  < stdio.h >
#include 
< string .h >

struct  line
{
    
double x1, x2, y;
    
bool ex;
}
;

line l1, l;
int  n;
double  len;

int  lineCnt;
line l2[
30 ];

void  CNT()
{
    
int i;
    
for(i = 0; i < lineCnt; i++)
    
{
        
if(l2[i].ex && len<l2[i].x2-l2[i].x1)
            len
=l2[i].x2-l2[i].x1;
    }

}


void  cut(line l1,  int  i)
{
     
if(l1.x1 <= l2[i].x1)
    
{
        
if(l1.x2<l2[i].x2 && l1.x2>l2[i].x1)
            l2[i].x1
=l1.x2;
        
if(l1.x2 >= l2[i].x2)
            l2[i].ex
=0;
    }
else
        
if(l1.x2 >= l2[i].x2)
        
{
            
if(l1.x1 <= l2[i].x2)
                l2[i].x2
=l1.x1;
        }
else
        
{
            l2[lineCnt].x1
=l1.x2, l2[lineCnt].x2=l2[i].x2, l2[lineCnt].ex=1;
            l2[i].x2
=l1.x1;
            lineCnt
++;
        }

    
}


void  func()
{
    
int i;
    line shadow;
    
double r=(l1.y-l.y)/(l1.y-l2[0].y);
    shadow.x1
=l1.x2-(l1.x2-l.x1)/r;
    shadow.x2
=l1.x1+(l.x2-l1.x1)/r;
    shadow.y
=l2[0].y;

    
for(i = 0; i < lineCnt; i++)
    
{
        
if(l2[i].ex)
            cut(shadow, i);
    }

}



int  main() {
    
while(scanf("%lf%lf%lf"&l1.x1, &l1.x2, &l1.y)==3)
    
{
        
if(l1.x1==0 && l1.x2==0 && l1.y==0)
            
break;
        len
=0;
        scanf(
"%lf%lf%lf"&l2[0].x1, &l2[0].x2, &l2[0].y);
        l2[
0].ex=1;
        lineCnt
=1;
        scanf(
"%d"&n);
        
        
int i;
        
for(i = 0; i < n; i++)
        
{
            scanf(
"%lf%lf%lf"&l.x1, &l.x2, &l.y);
            
if(l.y<l1.y && l.y>=l2[0].y)
            func();
        }

        CNT();
        
if(len>0)
            printf(
"%.2f\n", len);
        
else
            printf(
"No View\n");
    }

    
return 0;
}

你可能感兴趣的:(pku)