栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 3246 Game

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 3246 Game

#include <iostream>#include <vector>#include <algorithm>#include <cmath>#include <string.h>#include <stdio.h>using namespace std;#define MAX_N 100000 + 16typedef int type_xy;typedef struct Point{    int id;    type_xy x, y;    Point() {}    Point(type_xy x, type_xy y) : x(x), y(y) {}    Point operator + (Point p){ return Point(x + p.x, y + p.y); }    Point operator - (const Point& p){ return Point(x - p.x, y - p.y); }    Point operator * (type_xy d){ return Point(x*d, y*d); }    bool operator < (const Point& a) const    {        if (x != a.x) return x < a.x;        else return y < a.y;    }    type_xy dot(Point p) { return x*p.x + y*p.y; }    type_xy det(Point p) { return x*p.y - y*p.x; }};Point P[MAX_N], Q[MAX_N];inline type_xy cross(Point A, Point B, Point C){    return (B - A).det(C - A);}inline type_xy compute_area(Point A, Point B, Point C){    type_xy res = cross(A, B, C);    if (res < 0)    {        return -res;    }    return res;}inline type_xy compute_area(const vector<Point>& ps){    type_xy total = 0;    for (int i = 2; i < ps.size(); ++i)    {        total += compute_area(ps[0], ps[i - 1], ps[i]);    }    return total;}vector <Point> convex_hull(Point *ps, int N){    sort(ps, ps + N);    int k = 0;       vector <Point> qs(N * 2);       for (int i = 0; i < N; ++i)    {        while (k > 1 && (qs[k - 1] - qs[k - 2]).det(ps[i] - qs[k - 1]) <= 0) --k;        qs[k++] = ps[i];    }    for (int i = N - 2, t = k; i >= 0; --i)    {        while (k > t && (qs[k - 1] - qs[k - 2]).det(ps[i] - qs[k - 1]) <= 0) --k;        qs[k++] = ps[i];    }    qs.resize(k - 1);    return qs;}int main(int argc, char *argv[]){    int N;    while (~scanf("%d", &N) && N > 0)    {        for (int i = 0; i < N; ++i)        { scanf("%d%d", &P[i].x, &P[i].y); P[i].id = i;        }        memcpy(Q, P, N * sizeof(Point));        vector<Point> ps = convex_hull(P, N);        type_xy ans = 0x3f3f3f3f;        for (int i = 0; i < ps.size(); ++i)        { memcpy(P, Q, N * sizeof(Point)); swap(P[ps[i].id], P[N - 1]); ans = min(ans, compute_area(convex_hull(P, N - 1)));        }        printf("%d.%sn", ans / 2, ans % 2 == 1 ? "50" : "00");    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/367530.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号