程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> poj 3269 Building A New Barn

poj 3269 Building A New Barn

編輯:C++入門知識

#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\n",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\n",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\n",sum,ans);
    }
    return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved