zoukankan      html  css  js  c++  java
  • BZOJ 5099: Pionek(双指针)(占位)

    pro:有N个向量,你可以选择一些向量,使得其向量和离原点最远。 输出这个欧几里得距离的平方。

    sol:(感觉网上的证明都不是很充分,我自己也是半信半疑吧)日后证明了再补。

    #include<bits/stdc++.h>
    #define ll long long
    #define rep(i,a,b) for(int i=a;i<=b;i++)
    using namespace std;
    const int maxn=400010;
    const double pi=acos(-1.0);
    struct point{
        int x,y;
        double angle;
    };
    bool cmp(point w,point v){ return w.angle<v.angle; }
    point a[maxn]; ll ans,x,y;
    void update(){ ans=max(ans,1LL*x*x+y*y); }
    int main()
    {
        int N,head=0;
        scanf("%d",&N);
        rep(i,1,N){
            scanf("%d%d",&a[i].x,&a[i].y);
            a[i].angle=atan2(a[i].y,a[i].x);
        }
        sort(a+1,a+N+1,cmp);
        rep(i,1,N){
            a[i+N]=a[i];
            a[i+N].angle=a[i].angle+pi*2;
        }
        rep(i,1,N){
            x-=a[i-1].x; y-=a[i-1].y;
            update();
            while(head+1-i+1<=N&&head+1<=N+N&&a[head+1].angle-a[i].angle<=pi){
                head++; x+=a[head].x; y+=a[head].y;
                update();
            }
        }
        printf("%lld
    ",ans);
        return 0;
    }
  • 相关阅读:
    JUC学习
    java反射学习
    JSON入门学习
    redis
    NoSQ学习
    手写Lockl锁
    MapReduce过程
    scala学习
    idea jetty 配置
    java 基础--理论知识
  • 原文地址:https://www.cnblogs.com/hua-dong/p/10690366.html
Copyright © 2011-2022 走看看