Cod sursa(job #1709779)

Utilizator SAPIENTIA_N_formatXSAPIENTIA NformatX SAPIENTIA_N_formatX Data 28 mai 2016 13:50:48
Problema Metrou4 Scor 0
Compilator c Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.83 kb
#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    long int x,y;
} KOR;

int cmpfg(const void*,const void*);

int main()
{
    FILE*fin=fopen("metrou4.in","rt");
    FILE*fot=fopen("metrou4.out","wt");

    int t,n,i,j;

    fscanf(fin,"%d",&t);

    for(j=0; j<t; ++j)
    {

        fscanf(fin,"%d",&n);
        KOR q[n];

        for(i=0; i<n; ++i)
        {
            fscanf(fin,"%ld%ld",&q[i].x,&q[i].y);
        }

        qsort(q,n,sizeof(KOR),cmpfg);

        int w[n+1][n+1],p,o;

        for(o=0; o<=n; ++o){
            for(p=0; p<=n; ++p){
                w[o][p]=0;
            }
        }

        for(o=2; o<=n; ++o)
        {
            for(p=o-1; p<=o; ++p)
            {
                if(o==p)
                {
                    w[o][p]=0;
                }
                else if (q[o-1].x<q[p-1].x)
                {
                    w[o][p]=q[o-1].y-q[p-1].y;
                }
                else if (q[o-1].y<q[p-1].y)
                {
                    w[o][p]=q[o-1].x-q[p-1].x;
                }
                else
                {
                    w[o][p]=((q[o-1].x-q[p-1].x)+(q[o-1].y-q[p-1].y));
                }
            }
        }

        for(o=3; o<=n; ++o)
        {
            for(p=o-2; p>0; --p)
            {
                w[o][p]=w[o-1][p]+w[o][o-1];
            }
        }

        fprintf(fot,"%d\n",w[n][1]);
    }
    fclose(fin);
    fclose(fot);

    return 0;
}

int cmpfg(const void *p1,const void *p2)
{
    KOR *q1=(KOR*)p1;
    KOR *q2=(KOR*)p2;

    if(q1->x<q2->x)
    {
        return -1;
    }
    else if(q1->x>q2->x)
    {
        return 1;
    }
    else if(q1->y<q2->y)
    {
        return -1;
    }
    else if(q1->y>q2->y)
    {
        return 1;
    }
    else return 0;
}