• 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;
    }
  • 相关阅读:
    《卓有成效的管理者》读后感
    小课堂week13 Clean Code Part2
    小课堂Week12 Clean Code Part1
    小课堂Week11 会说话的代码
    小课堂Week10 例外处理设计的逆袭Part3
    Spark菜鸟学习营Day6 分布式代码运行调试
    UML(一) 类图及类间关系
    分布式事务(一)两阶段提交及JTA
    Java线程间通信方式剖析——Java进阶(四)
    Java进阶(三)多线程开发关键技术
  • 原文地址:https://www.cnblogs.com/SQL/p/933467.html
Copyright © 2020-2023  润新知