zoukankan      html  css  js  c++  java
  • abc139F

    半眼秒了
    显然随机就能过

    #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
    ",ans);
    }
    

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

  • 相关阅读:
    腾讯安全上海游戏部门笔试题
    2017
    2016
    2015
    2014
    2013
    2012
    2011
    2010
    2009
  • 原文地址:https://www.cnblogs.com/MXang/p/11596955.html
Copyright © 2011-2022 走看看