• 【BZOJ1132】【POI2008】Tro 计算几何 叉积求面积


    链接:

    #include <stdio.h>
    int main()
    {
        puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢");
        puts("网址:blog.csdn.net/vmurder/article/details/46605807");
    }

    题解:

    首先暴力是 O(n3) 求每一个三角形面积。
    但是三角形面积怎么求?一般我们都是用叉积……等等?那一个叉积不是被算了非常多遍?

    好了。正解出来了,先有序地把点排排序保证不重。然后算一下每一个叉积的贡献。也就是每条边的贡献,,然后由于排序啥的。时间复杂度 O(n2logn)

    然后这道题。呃,卡精度……?!
    求叉积嘛,最后得到的东西都须要除以2。。先不除。到最后特判好了QwQ

    代码:

    #include <cmath>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #define N 3010
    using namespace std;
    struct Point
    {
        long long x,y;
        void read(){scanf("%lld%lld",&x,&y);}
    }now,p[N],tp[N];
    inline long long xmul(Point B,Point C,Point A=now)
    {return (C.y-A.y)*(B.x-A.x)-(B.y-A.y)*(C.x-A.x);}
    bool cmpxy(Point A,Point B){return A.x==B.x?A.y<B.y:A.x<B.x;}
    bool cmpmu(Point A,Point B){return xmul(A,B)>0;}
    
    int n;
    long long ans;
    int main()
    {
        freopen("test.in","r",stdin);
    
        int i,j,k;
        long long sumx,sumy;
    
        scanf("%d",&n);
        for(i=1;i<=n;i++)p[i].read();
            sort(p+1,p+n+1,cmpxy);
        for(i=1;i<=n-2;i++)
        {
            now=p[i];
            sumx=sumy=0;
            for(j=i+1;j<=n;j++)tp[j]=p[j];
                sort(tp+i+1,tp+n+1,cmpmu);
            for(j=i+1;j<=n;j++)
            {
                sumx+=tp[j].x-now.x;
                sumy+=tp[j].y-now.y;
            }
            for(j=i+1;j <n;j++)
            {
                sumx-=tp[j].x-now.x;
                sumy-=tp[j].y-now.y;
                ans+=(tp[j].x-now.x)*sumy;
                ans-=(tp[j].y-now.y)*sumx;
            }
        }
        if(ans&1)printf("%lld.5
    ",ans>>1);
        else printf("%lld.0
    ",ans>>1);
    
        return 0;
    }
    
  • 相关阅读:
    Babel下的ES6兼容性与规范
    链接属性rel=’external’、rel=’nofollow’、rel=’external nofollow’三种写法的区别
    Art-template模板
    常用 Git 命令清单
    四种常见的 POST 提交数据方式
    前端面试题
    素数筛法
    编程之美 2.12 快速寻找满足条件的两个数 解法三证明 (算法导论 第二版 2.3-7 在n个元素的集合S中找到两个和为x的元素)
    NOIP1996 提高组 挖地雷
    全排列生成算法
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5168446.html
Copyright © 2020-2023  润新知