zoukankan      html  css  js  c++  java
  • 9-29测试

    三角形计数

    时间限制: 3 Sec  内存限制: 8 MB
    提交: 269  解决: 38
    [提交][状态][讨论版]

    题目描述

    【背景】
    Day1T1当然是又裸又水的题了怎么会有背景呢。
    【题目描述】
    给定n个点的坐标(0<=xi,yi<=10000)求选出任意三个点能组成的三角形的总面积。

    输入

    第一行n表示点数。接下来每行两个数xi,yi表示点的坐标。

    输出

    一行一个浮点数保留一位小数表示面积和。

    样例输入

    5 0 0 1 2 0 2 1 0 1 1

    样例输出

    7.0

    提示

    【样例解释】


    注意到三角形面积有个公式,就是以最下面一点为原点(很重要),如果两个点坐标分别为(x1,y1),(x2,y2),面积为abs(x1y2-x2y1);

    然后枚举下面一个点,线扫一下即可

    有个有用的公式arctan:atan2

    然后常数有点大就记一下每个点的arctan

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    long long ans;
    int n,Num[3005];
    double Angle[3005];
    struct note{
        int x,y;
        friend bool operator<(note a,note b)
        {
            return a.y>b.y;
        }
    }point[3005],b[3005];
     
    bool cmp(int a,int b)
    {
        return Angle[a]<Angle[b];
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        scanf("%d %d",&point[i].x,&point[i].y);
        sort(point+1,point+1+n);
        for(int i=3;i<=n;i++)
        {
            for(int j=1;j<i;j++)
            b[j]=(note){point[j].x-point[i].x,point[j].y-point[i].y},Angle[j]=atan2(b[j].y,b[j].x),Num[j]=j;
            sort(Num+1,Num+i,cmp);
            long long sumx=b[Num[1]].x,sumy=b[Num[1]].y;
            for(int k=2;k<i;k++)
            {
                ans+=sumx*b[Num[k]].y-sumy*b[Num[k]].x;
                sumx+=b[Num[k]].x,sumy+=b[Num[k]].y;
            }
        }
        if (ans&1) cout<<ans/2<<".5"<<endl;
        else cout<<ans/2<<".0"<<endl;
        return 0;
    } 

    精度误差还要特判一下

  • 相关阅读:
    HDU 5528 Count a * b 欧拉函数
    HDU 5534 Partial Tree 完全背包
    HDU 5536 Chip Factory Trie
    HDU 5510 Bazinga KMP
    HDU 4821 String 字符串哈希
    HDU 4814 Golden Radio Base 模拟
    LA 6538 Dinner Coming Soon DP
    HDU 4781 Assignment For Princess 构造
    LA 7056 Colorful Toy Polya定理
    LA 6540 Fibonacci Tree
  • 原文地址:https://www.cnblogs.com/dancer16/p/7610032.html
Copyright © 2011-2022 走看看