Cod sursa(job #171643)

Utilizator M@2Te4iMatei Misarca M@2Te4i Data 4 aprilie 2008 18:47:43
Problema Wanted Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <cstdio>
#include <cstdlib>
#define vv 220

using namespace std;

int x[vv],y[vv],n,m,p;

void citire()
{
    freopen("wanted.in","r",stdin);
    scanf("%d", &n);
    m=20000;
    p=0;
    for (int i=0; i<n; i++)
    {
        scanf("%d%d", &x[i], &y[i]);
        if (x[i]<m)
            m=x[i];
    }
}

void normalizare()
{
    if (m<0)
    {
        p=(-m);
        for (int i=0; i<n; i++)
            x[i]+=p;
    }
}

void rezolvare()
{
    int s,e,o;
    m=2100000000;
    for (int i=0; i<n; i++)
    {
        e=0;
        s=labs(p-x[i]);
        s+=y[i];
//        o=0;
        for (int j=i+1; j<n; j++)
        {
//            o=1;
            s+=y[j]+y[j-1];
            s+=x[j]-x[j-1];
        }
//        if (o==1)
            e=s;
        s=labs(p-x[i]);
        s+=y[i];
//        o=0;
        for (int j=i-1; j>=0; j--)
        {
//            o=1;
            s+=y[j]+y[j+1];
            s+=x[j+1]-x[j];
        }
        if (e>s)// && o==1)
            s=e;
        if (s<m && e>0)
            m=s;
    }
}

void sortare(int l, int r)
{
int i,j,xx,yy;
i=l;
j=r;
xx=x[(l+r)/2];
do
{
    while (x[i]<xx)
        ++i;
    while (xx<x[j])
        --j;
    if (i<=j)
    {
        yy=x[i];
        x[i]=x[j];
        x[j]=yy;
        yy=y[i];
        y[i]=y[j];
        y[j]=yy;
        ++i;
        --j;
    }
}
while (i<=j);
if (l<j)
    sortare(l,j);
if (i<r)
    sortare(i,r);
}

int main()
{
    citire();
    sortare(0,n-1);
    normalizare();
    rezolvare();
    freopen("wanted.out","w",stdout);
    printf("%d\n", m);
    return 0;
}