zoukankan      html  css  js  c++  java
  • 今天HNU的一道水题11018

    水题 ~~~啥都不说了
    水方法解决
    #include<string.h>
    #include 
    <stdio.h>

    int x1, y1, x2, y2;

    double seg[100000][2];
    int cnt;
    int res;

    int segb[100000];
    double total[100000][2];

    int xl,yl;

    void shadow()
    {
        
    double x=xl,y=yl;
        
    double ax=x1,ay=y1,bx=x2,by=y2;

        
    double d1,d2;
        d1
    =x-y*(x-ax)/(y-ay);
        d2
    =x-y*(x-bx)/(y-by);
        
    if(d1>d2)
        
    {
            
    double hold=d1;
            d1
    =d2;
            d2
    =hold;
        }

        seg[cnt][
    0]=d1;
        seg[cnt][
    1]=d2;
        segb[cnt]
    =1;
        cnt
    ++;
    }



    void cacul()
    {
        
    int i=0;
        
    while(i<cnt)
        
    {    
            
    for(int l=0;l<cnt;l++)
            
    {
                
    if(segb[l]==1)
                
    {            
                    total[res][
    0]=seg[l][0];
                    total[res][
    1]=seg[l][1];
                    segb[l]
    =0;
                    res
    ++;
                    i
    ++;
                    
    break;
                }

            }

            
    for(int j=0;j<res;j++)
            
    {
                
    int k=0;
                
    for(k=0;k<cnt;k++)
                
    {
                    
    if(segb[k]==1)
                    
    {
                        
    if(total[j][0]-seg[k][0]>=0 && seg[k][1]-total[j][0]>=0)
                        
    {
                            total[j][
    0]=seg[k][0];
                            
    if(seg[k][1]-total[j][1]>=0)
                                total[j][
    1]=seg[k][1];
                            i
    ++;
                            segb[k]
    =0;
                            k
    =0;
                        }

                        
    else
                        
    if(total[j][1]-seg[k][0]>=0 && seg[k][1]-total[j][1]>=0)
                        
    {
                            total[j][
    1]=seg[k][1];
                            
    if(total[j][0]-seg[k][0]>=0)
                                total[j][
    0]=seg[k][0];        
                            i
    ++;
                            segb[k]
    =0;
                            k
    =0;
                        }

                        
    else
                        
    if(seg[k][0]-total[j][0]>=0 && total[j][1]-seg[k][1]>=0)
                        
    {
                            i
    ++;
                            segb[k]
    =0;
                            k
    =0;
                        }

                    }

                }

            }


        }

    }


    int main()
    {
        
    int n;
        scanf(
    "%d",&n);
        
    for(int i=0;i<n;i++)
        
    {
            memset(seg,
    0,sizeof(seg));
            memset(total,
    0,sizeof(total));
            memset(segb,
    0,sizeof(segb));
            cnt
    =0;
            res
    =0;
            
    int m;
            scanf(
    "%d",&m);
            scanf(
    "%d%d",&xl,&yl);
            
    for(int j=0;j<m;j++)
            
    {
                scanf(
    "%d%d%d%d",&x1,&y1,&x2,&y2);
                shadow();
            }

            cacul();
            printf(
    "%d\n",res+1);
        }


        
    return 0;    
    }
  • 相关阅读:
    正则 不匹配某个单词
    希赛 系统架构设计师教程 勘误
    QQ 快速登录中获取用户信息
    requests 配置tor代理后提示'Failed to establish a new connection: [Errno -2] Name or service not known'
    xadmin choice filter 多选
    kali linux 热点 无法获取IP
    windows10 输入法添加小鹤双拼
    del: recycle for linux
    安装WSL2
    cmake(转载)
  • 原文地址:https://www.cnblogs.com/SQL/p/894313.html
Copyright © 2011-2022 走看看