zoukankan      html  css  js  c++  java
  • Toy Storage POJ

    Toy Storage

    题目链接:https://vjudge.net/problem/POJ-2398#author=Jawen

    题目:

     

     思路:跟toys那题差不多,可看上篇博客,但是这题将bc两点作为一条线,然后将所有的线排序,再来依次判断点是否在线的左边,然后用map来排序方便求出每个toy的数量大小

    #include<cmath>
    #include<stdio.h>
    #include<algorithm>
    #include<map>
    //#include<bits/stdc++.h>
    using namespace std;
    const double pi = acos(-1.0);
    const double inf = 1e100;
    const double eps = 1e-6;
    const int maxn=1e4+10;
    
    struct Point{
        double x, y;
        Point(double x = 0, double y = 0):x(x),y(y){}
    };
    typedef Point Vector;
    Vector operator + (Vector A, Vector B){
        return Vector(A.x+B.x, A.y+B.y);
    }
    Vector operator - (Point A, Point B){
        return Vector(A.x-B.x, A.y-B.y);
    }
    Vector operator * (Vector A, double p){
        return Vector(A.x*p, A.y*p);
    }
    Vector operator / (Vector A, double p){
        return Vector(A.x/p, A.y/p);
    }
    double Cross(Vector A, Vector B){
        return A.x*B.y-A.y*B.x;
    }
    bool ToLeftTest(Point a, Point b, Point c){
        return Cross(b - a, c - b) > 0;
    }
    
    struct Line{
        Point c, b;
        Line(){}
        bool operator<(const Line &other)const{
            return this->b.x<other.b.x;
        }
    };
    
    int main()
    {
        //freopen("text","r",stdin);
        int n;
        while(~scanf("%d",&n)&&n){
            int m;
            double x1,y1,x2,y2;
            Point tt[maxn];
            Line tt1[maxn];
            scanf("%d%lf%lf%lf%lf",&m,&x1,&y1,&x2,&y2);
            // cout<<n<<" "<<m<<' '<<x1<<" "<<y1<<' '<<endl;
            double b, c;
            int pos = 0,pos1=0;
            for (int i = 0; i < n; i++) {
                scanf("%lf%lf", &c, &b);
                tt[pos].x = c, tt[pos].y = y1;
                tt1[pos1].c=tt[pos];
                pos++;
                tt[pos].x = b, tt[pos].y= y2;
                tt1[pos1].b=tt[pos];
                pos++;
                pos1++;
            }
            tt[pos].x = x2, tt[pos].y = y1;
            tt1[pos1].c=tt[pos];
            pos++;
            tt[pos].x = x2, tt[pos].y = y2;
            tt1[pos1].b=tt[pos];
            sort(tt1,tt1+pos1);
            map<int,int>mm;
            int t1, t2, box[maxn] = {0};
            for (int i = 0; i < m; ++i) {
                scanf("%d%d", &t1, &t2);
                Point a;
                a.x = t1, a.y = t2;
                int num = 0;
                for (int j = 0; j <= n; ++j) {
                    if (ToLeftTest(a, tt1[j].b, tt1[j].c)) {
                        //cout<<"i="<<i<<","<<ToLeftTest(a,tt[j+1],tt[j])<<endl;
                        //cout<<"j="<<j<<endl;
                        num = j;
                        break;
                    }
                }
                box[num]++;
            }
            sort(box,box+n+1);
            for(int i=0;i<=n;i++)
                mm[box[i]]++;
            for (int i = 0; i <= n;i++) {
                //printf("(%d,%d)(%d,%d)
    ",tt[i].x,tt[i].y,tt[i+1].x,tt[i+1].y);
                if(box[i]!=0)
                {
                    printf("Box
    ");
                    break;
                }
            }
           for(map<int,int>::iterator it=mm.begin();it!=mm.end();it++)
           {
               if(it->first!=0)
                  printf("%d: %d
    ",it->first,it->second);
           }
        }
        return 0;
    }
    
  • 相关阅读:
    ubuntu 安裝QQ ,WEIXIN,百度WP等
    深度学习基础--Bottleneck(瓶颈) Architectures
    sql 函数
    线性回归
    二元逻辑回归
    参数检验
    DrawFrameControl 绘制标准控件
    SetProcessWorkingSetSize 降低程序运行内存
    【转载】VC IME 通信
    【转载】EmptyWorkingSet 程序运行内存整清理
  • 原文地址:https://www.cnblogs.com/Vampire6/p/12182308.html
Copyright © 2011-2022 走看看