码迷,mamicode.com
首页 > 其他好文 > 详细

abc139F

时间:2019-09-27 12:39:12      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:++   printf   its   +=   c++   std   clu   代码   abs   

半眼秒了
显然随机就能过

#include <bits/stdc++.h>

#include <random>
using namespace std;
typedef double db;
int n;
db x[105],y[105];int id[105];
db abs(db x,db y){return sqrt(x*x+y*y);}
db sa(){
    shuffle(id+1,id+1+n, std::mt19937(std::random_device()()));
    db a=0,b=0;
    for(int i=1;i<=n;i++){
        if(abs(a+x[id[i]],b+y[id[i]])>=abs(a,b))a+=x[id[i]],b+=y[id[i]];
    }
    return abs(a,b);
}
int main(){
    ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++)cin>>x[i]>>y[i],id[i]=i;
    db ans=0;
    for(int i=1;i<=100000;i++)
        ans = max(ans,sa());
    printf("%.17f\n",ans);
}

下面考虑正解
我们要选的一堆向量,肯定要在某个夹角范围内选,并且这个范围内的所有向量是都要选的,
极角排序然后枚举起点就行。
叉积排序会wa???不懂。
直接用atan2反而能过。
代码不粘了600多行板子不太好

abc139F

标签:++   printf   its   +=   c++   std   clu   代码   abs   

原文地址:https://www.cnblogs.com/MXang/p/11596955.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!