• POJ 2398 Toy Storage(计算几何)


    和POJ2318一样的方法,都是利用叉积推断+二分。只是这题要先排序。还有输出的是,每一个数量的格子数

    代码:

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    const int N = 1005;
    
    int n, m, x1, y1, x2, y2;
    
    struct Point {
        int x, y;
        Point() {}
        Point(int x, int y) {
            this->x = x;
            this->y = y;
        }
    };
    
    typedef Point Vector;
    
    Vector operator - (Vector A, Vector B) {
        return Vector(A.x - B.x, A.y - B.y);
    }
    
    struct Seg {
        Point a, b;
        Seg() {}
        Seg(Point a, Point b) {
            this->a = a;
            this->b = b;
        }
    } seg[N];
    
    int ans[N];
    
    int Cross(Vector A, Vector B) {return A.x * B.y - A.y * B.x;}
    
    void gao(Point p) {
        int l = 0, r = n;
        while (l < r) {
            int mid = (l + r) / 2;
            if (Cross(seg[mid].a - p, seg[mid].b - p) < 0) r = mid;
            else l = mid + 1;
        }
        ans[l]++;
    }
    
    bool cmp(Seg a, Seg b) {
        return a.a.x < b.a.x;
    }
    
    int out[N];
    
    int main() {
        while (~scanf("%d", &n) && n) {
            memset(ans, 0, sizeof(ans));
            scanf("%d%d%d%d%d", &m, &x1, &y1, &x2, &y2);
            int x, y;
            for (int i = 0; i < n; i++) {
                scanf("%d%d", &x, &y);
                seg[i] = Seg(Point(x, y1), Point(y, y2));
            }
            sort(seg, seg + n, cmp);
            for (int i = 0; i < m; i++) {
                scanf("%d%d", &x, &y);
                gao(Point(x, y));
            }
            memset(out, 0, sizeof(out));
            for (int i = 0; i <= n; i++)
                if (ans[i]) out[ans[i]]++;
            printf("Box
    ");
            for (int i = 1; i <= 1000; i++)
                if (out[i]) printf("%d: %d
    ", i, out[i]);
        }
        return 0;
    }
    


  • 相关阅读:
    【C语言】学习笔记9——结构struct(2)
    WPF dev 获取gridControl筛选后的数据
    WPF DEV dxc:ChartControl 柱状图
    WPF 重写ListBox(透明效果)
    WPF 后台重写 DataTemplate
    WPF 去掉Drag a column header here to group by that column
    c# 对DataTable进行分组group by
    c# ref与out用法
    WPF canvas设置旋转角度和偏移位置
    WPF 流加载
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7253581.html
Copyright © 2020-2023  润新知