• A


    题目大意:n个点,任意几个点组合后得到的点距离原点的最远距离。

    题解:极角排序:https://blog.csdn.net/qq_39942341/article/details/79840394

    利用极角排序,将这些点看成与原点相作用的向量,然后根据平行四边行法则,两向量之间的角度相差越小,其复合得到的向量的长度越长。

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1E5+7;
    struct stu{
        double a,b;
        bool friend operator <(const stu &x,const stu &y){
            return atan2(x.b,x.a)<atan2(y.b,y.a);
        }
    }arr[N];
    int nxt[N];
    int main(){
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)    cin>>arr[i].a>>arr[i].b;    
        for(int i=1;i<=n;i++) nxt[i]=i+1;
        nxt[n]=1;
        sort(arr+1,arr+1+n);
        double ans=0;
        for(int i=1;i<=n;i++){//以每个点为起始点,遍历一圈后回到起始点,同时记录大小 
            double dx=arr[i].a;
            double dy=arr[i].b;
            ans=max(ans,arr[i].a*arr[i].a+arr[i].b*arr[i].b);
            
            for(int j=nxt[i];j!=i;j=nxt[j]){
                dx+=arr[j].a;
                dy+=arr[j].b;
                ans=max(ans,dx*dx+dy*dy);
            }
        }
        printf("%.15lf
    ",sqrt(ans));
        return 0;
    }
  • 相关阅读:
    STL中的string
    STL中的map
    STL中的set和multiset
    C++基础知识
    希尔排序
    桶排序
    归并排序
    堆排序
    数组左边奇数右边偶数算法O(n)
    背包问题 洛谷P1164 小A点菜
  • 原文地址:https://www.cnblogs.com/Accepting/p/11900458.html
Copyright © 2020-2023  润新知