zoukankan      html  css  js  c++  java
  • poj2398

    同2318

    在其基础上,输入需要排序,输出稍复杂

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    #define maxn 5005
    
    struct Elem
    {
        int cnt; //point count
        int num; //box num
        bool operator < (const Elem &a) const
        {
            return cnt < a.cnt;
        }
    }elem[maxn];
    
    struct Line
    {
        int u, d;
        bool operator < (const Line &a) const
        {
            return u < a.u;
        }
    } line[maxn];
    
    int n, m, x1, x2, y1, y2;
    int toy[maxn];
    int box_cnt[maxn];
    int elem_num;
    
    bool left(int x, int y, Line a)
    {
        if (x < a.d + (y - y2) * (a.u - a.d) * 1.0 / (y1 - y2))
            return true;
        return false;
    }
    
    int binarysearch(int x, int y)
    {
        int l = 0, r = n;
        int mid;
    
        while (l < r)
        {
            mid = (l + r) / 2;
            if (left(x, y, line[mid]))
                r = mid;
            else
                l = mid + 1;
        }
        return l;
    }
    
    int main()
    {
        //freopen("t.txt", "r", stdin);
        while (scanf("%d", &n), n != 0)
        {
            memset(toy, 0, sizeof(toy));
            scanf("%d%d%d%d%d", &m, &x1, &y1, &x2, &y2);
            for (int i = 0; i < n; i++)
                scanf("%d%d", &line[i].u, &line[i].d);
            sort(line, line + n);
            for (int i = 0; i < m; i++)
            {
                int x, y;
                scanf("%d%d", &x, &y);
                toy[binarysearch(x, y)]++;
            }
            memset(box_cnt, 0, sizeof(box_cnt));
            for (int i = 0; i <= n; i++)
                box_cnt[toy[i]]++;
            elem_num = 0;
            for (int i = 1; i <= n; i++)
                if (box_cnt[i] > 0)
                {
                    elem[elem_num].cnt = i;
                    elem[elem_num].num = box_cnt[i];
                    elem_num++;
                }    
            sort(elem, elem + elem_num);
            puts("Box");
            for (int i = 0; i < elem_num; i++)
                printf("%d: %d
    ", elem[i].cnt, elem[i].num);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    适配器模式
    显示实现接口
    Mysql表引擎的切换
    Mysql事务隔离级别
    按照指定的格式解析字节数组
    委托和事件的简单实用
    C#压缩和解压缩字节(GZip)
    Mysql数据库批量添加数据
    常用的分页类
    保证依赖的服务已全部启动
  • 原文地址:https://www.cnblogs.com/rainydays/p/3308002.html
Copyright © 2011-2022 走看看