zoukankan      html  css  js  c++  java
  • poj 3269 Building A New Barn

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    const int maxn=1e4+9;
    int x[maxn],y[maxn];
    struct D
    {
        int x,y;
        bool operator <(const D &xx)const
        {
            if(x==xx.x)
            return y<xx.y;
            return x<xx.x;
        }
    }point[maxn];
    
    int abs(int a)
    {
        if(a<0) return -a;
        return a;
    }
    
    int main()
    {
    //    freopen("in.txt","r",stdin);
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d %d",&x[i],&y[i]);
            point[i].x=x[i];
            point[i].y=y[i];
        }
        sort(x+1,x+1+n);
        sort(y+1,y+1+n);
        sort(point+1,point+1+n);
        int ans=0;
        long long sum=0;
        if(n&1||(x[n>>1]==x[n+2>>1]&&y[n>>1]==y[n+2>>1]))
        {
            bool flag=false;
            int xx=x[n+1>>1],yy=y[n+1>>1];
            for(int k=1;k<=n;k++)
            if(point[k].x==xx&&point[k].y==yy)
            flag=true;
            if(!flag)
            {
                for(int i=1;i<=n;i++)
                {
                    sum+=abs(x[i]-xx);
                    sum+=abs(y[i]-yy);
                }
                printf("%lld %d
    ",sum,1);
            }
            else
            {
                for(int i=1;i<=n;i++)
                {
                    sum+=abs(x[i]-(xx+1));
                    sum+=abs(y[i]-yy);
                }
                long long ret=sum,tmp=1;
                sum=0;
                for(int i=1;i<=n;i++)
                {
                    sum+=abs(x[i]-(xx-1));
                    sum+=abs(y[i]-yy);
                }
                if(sum==ret) tmp++;
                else if(sum<ret) ret=sum;
                sum=0;
                for(int i=1;i<=n;i++)
                {
                    sum+=abs(x[i]-xx);
                    sum+=abs(y[i]-(yy+1));
                }
                if(sum==ret) tmp++;
                else if(sum<ret) ret=sum;
                sum=0;
                for(int i=1;i<=n;i++)
                {
                    sum+=abs(x[i]-xx);
                    sum+=abs(y[i]-(yy-1));
                }
                if(sum==ret) tmp++;
                else if(sum<ret) ret=sum;
                printf("%lld %d
    ",sum,tmp);
            }
        }
        else
        {
            for(int i=1;i<=n;i++)
            {
                sum+=abs(x[i]-x[n>>1]);
                sum+=abs(y[i]-y[n>>1]);
            }
            int k=1;
            for(int i=x[n>>1];i<=x[n+2>>1];i++)
            for(int j=y[n>>1];j<=y[n+2>>1];j++)
            {
                for(;point[k].x<i||(point[k].x==i&&point[k].y<j);k++);
                if(point[k].x!=i||point[k].y!=j) ans++;
            }
            printf("%lld %d
    ",sum,ans);
        }
        return 0;
    }
    



  • 相关阅读:
    dom2级事件兼容性写法
    cookie js案例
    cookie讲解
    js高级总结
    鼠标拖拽时,选择文字问题
    正则的细节
    正则捕获的细节及replace分析
    正则的使用及replace细讲
    while循环的讲解
    acwing 189. 乳草的入侵 bfs
  • 原文地址:https://www.cnblogs.com/james1207/p/3292216.html
Copyright © 2011-2022 走看看