AT_abc139f 题解

Posted chifan-duck

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AT_abc139f 题解相关的知识,希望对你有一定的参考价值。

我们注意向量加法的几何意义。

将多个向量向加时,最优的情况是所有边的极坐标单调。

但是有一种特殊情况,就是从极角最大的到极角最小的。

因此把所有向量极角排序,在做一些处理就行了。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+100;
const double eps = 1e-15;
const double pi = acos(-1);
struct Vector
    double x,y;
    Vector(double X=0,double Y=0)x=X,y=Y;
p[maxn];
Vector operator+(Vector x,Vector y)
    return Vector(x.x+y.x,x.y+y.y);

Vector operator-(Vector x,Vector y)
    return Vector(x.x-y.x,x.y-y.y);

Vector operator*(Vector x,double y)
    return Vector(x.x*y,x.y*y);

double polar(Vector x)
    return atan2(x.x,x.y);

double len(Vector x)
    return sqrt(x.x*x.x+x.y*x.y);

bool cmp(Vector p1,Vector p2)

    return polar(p1)<polar(p2);

int n;
double ans;
int main()
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>p[i].x>>p[i].y;
    
    sort(p+1,p+n+1,cmp);
    for(int i=1;i<=n;i++)
        p[i+n]=p[i];
    for(int i=1;i<=2*n;i++)
        for(int j=i;j<=2*n;j++)
            if((j-i+1)>n) continue;
            Vector res=Vector(0,0);
            for(int k=i;k<=j;k++)
                res=res+p[k];
            
            ans=max(ans,len(res));
        
    
    printf("%.13f",ans);

以上是关于AT_abc139f 题解的主要内容,如果未能解决你的问题,请参考以下文章

AT_abc_264_g

AT_abc271_e 总结

leetcode每日一题(2020-06-25):139. 单词拆分

LeetCode #139. Word Break C#

《LeetCode之每日一题》:139.用 Rand7() 实现 Rand10()

leetcode 139. 单词拆分---完全背包问题之true or false类型