zoukankan      html  css  js  c++  java
  • 洛咕 P3964 [TJOI2013]松鼠聚会

    有个结论就是把坐标((x,y))变形成(((x+y)/2,(x-y)/2)),切比雪夫距离就变成了曼哈顿距离。

    所以变换一下坐标直接统计答案即可。

    // luogu-judger-enable-o2
    #include<bits/stdc++.h>
    #define il inline
    #define vd void
    typedef long long ll;
    il int gi(){
        int x=0,f=1;
        char ch=getchar();
        while(!isdigit(ch)){
            if(ch=='-')f=-1;
            ch=getchar();
        }
        while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
        return x*f;
    }
    struct yyb{ll x,y;}s[100010];
    il bool operator <(const yyb&a,const yyb&b){return a.x<b.x;}
    ll Y[100010],sY[100010],sX[100010];
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("3964.in","r",stdin);
        freopen("3964.out","w",stdout);
    #endif
        int n=gi();
        for(int i=1;i<=n;++i){
            int x=gi(),y=gi();
            s[i].x=x+y,s[i].y=x-y;
            Y[i]=s[i].y;
        }
        std::sort(s+1,s+n+1);
        std::sort(Y+1,Y+n+1);
        for(int i=1;i<=n;++i)sY[i]=sY[i-1]+Y[i];
        for(int i=1;i<=n;++i)sX[i]=sX[i-1]+s[i].x;
        ll ans=1e18;
        for(int i=1;i<=n;++i){
            int p=std::lower_bound(Y+1,Y+n+1,s[i].y)-Y;
            ans=std::min(ans,-sX[i]*2+(i+i-n)*s[i].x+sX[n]-sY[p]*2+(p+p-n)*s[i].y+sY[n]);
        }
        printf("%lld
    ",ans/2);
        return 0;
    }
    
  • 相关阅读:
    url 记录
    tvm
    const flold
    spring
    java连接mysql数据库
    linux常用命令记录
    pikachu漏靶场洞测试
    Starting.....
    IOS App提交流程
    InApp Purchase(iap)快速指南
  • 原文地址:https://www.cnblogs.com/xzz_233/p/9827322.html
Copyright © 2011-2022 走看看