zoukankan      html  css  js  c++  java
  • Toy Storage--POJ2398(计算几何)

    http://poj.org/problem?id=2398

    这道题和上一道TOYS是一样的   就是输出不一样  还有就是这个给的是乱序  你要先对挡板排序  

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    #include <cstdio>
    #include <cstdlib>
    #include <cctype>
    #include <math.h>
    #include <ctype.h>
    
    using namespace std;
    #define memset(a,b) memset(a,b,sizeof(a))
    #define N 5500
    typedef long long  ll;
    
    struct node
    {
        int x, y, v;
    }p[N],u[N];
    int y2;
    
    int cmp(const void *a,const void *b)
    {
        struct node *c, *f;
        c=(struct node *)a;
        f=(struct node *)b;
        return c->x-f->x;
    }
    
    int Find(int nx,int ny,int l,int r)
    {
        if(l==r-1)
            return l;
        int mid=(l+r)/2;
        node d;
        d.x=nx-p[mid].v;
        d.y=ny-y2;
        if((d.x*p[mid].y)-(d.y*p[mid].x)>0)
        {
            l=mid;
            r=r;
            return Find(nx,ny,l,r);
        }
        else if((d.x*p[mid].y)-(d.y*p[mid].x)<0)
        {
            l=l;
            r=mid;
            return Find(nx,ny,l,r);
        }
        return 0;
    }
    
    int main()
    {
        int n,m,x1,x2,y1,a[N];
        while(scanf("%d",&n),n)
        {
            memset(a,0);
            scanf("%d %d %d %d %d",&m,&x1,&y1,&x2,&y2);
            p[0].x=x1;
            p[0].y=y2;
            p[0].v=x1;
            for(int i=1;i<=n;i++)
            {
                scanf("%d %d",&u[i].x,&u[i].y);
            }
            qsort(u+1,n,sizeof(u[0]),cmp);
            for(int i=1;i<=n;i++)
            {
                p[i].x=u[i].x-u[i].y;
                p[i].y=y1-y2;
                p[i].v=u[i].y;
            }
            p[n+1].x=x2;
            p[n+1].y=y1;
            p[n+1].v=x2;
            int k,v;
            for(int i=0;i<m;i++)
            {
                scanf("%d %d",&k,&v);
                int aa=Find(k,v,0,n+1);
                a[aa]++;
            }
            int ans[N];
            memset(ans,0);
            for(int i=0;i<=n;i++)
            {
                if(a[i])
                {
                    ans[a[i]]++;
                }
            }
            printf("Box
    ");
            for(int i=1;i<=n;i++)
            {
                if(ans[i])
                    printf("%d: %d
    ",i,ans[i]);
            }
        }
        return 0;
    }
  • 相关阅读:
    Qt之加载QSS文件
    Qt之QSS(黑色炫酷)
    Sublime Text 2 快捷键
    QTablewidget 简单例子
    QTableview 只显示横向线
    Qt删除文件夹
    Ubuntu(Debian)apt-get
    C++中char*与wchar_t*之间的转换
    Qtl和JS、HTML通信/交互
    浅谈Socket编程
  • 原文地址:https://www.cnblogs.com/linliu/p/5405879.html
Copyright © 2011-2022 走看看