Cod sursa(job #126315)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 21 ianuarie 2008 21:13:00
Problema Inundatii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <stdio.h>
#include <stdlib.h>
long i,j;
long long xi[50000],yi[50000],zi[50000],x1,y1,z1,x2,y2,z2,x,y,z;
long long n,min=0;
int main()
{
 FILE*f=fopen("inundatii.in","r");
 FILE*g=fopen("inundatii.out","w");
 fscanf(f,"%ld",&n);
 for (i=1; i<=n; i++)
   fscanf(f,"%lld%lld%lld",&xi[i],&yi[i],&zi[i]);
 if (n % 2==1)
   {
    x1=xi[n / 2 + 1]-1; y1=yi[n / 2 + 1]-1; z1=zi[n / 2 + 1]-1;
    x2=xi[n / 2 + 1]+1; y2=yi[n / 2 + 1]+1; z2=zi[n / 2 + 1]+1;
    for (i=n/2; i>=1; --i)
      {
       min+=abs(xi[i]-x1)+abs(yi[i]-y1)+abs(zi[i]-z1);
       x1--; y1--; z1--;
       min+=abs(xi[n-i+1]-x2)+abs(yi[n-i+1]-y2)+abs(zi[n-i+1]-z2);
       x2++; y2++; z2++;
      }
   }
  else
    {
     x=(xi[n / 2]+xi[n / 2 + 1]) / 2;
     y=(yi[n / 2]+yi[n / 2 + 1]) / 2;
     z=(zi[n / 2]+zi[n / 2 + 1]) / 2;
     x1=x; y1=y; z1=z;
     x2=x+1; y2=y+1; z2=z+1;
     for (i=n/2; i>=1; --i)
       {
        min+=abs(xi[i]-x1)+abs(yi[i]-y1)+abs(zi[i]-z1);
        x1--; y1--; z1--;
        min+=abs(xi[n-i+1]-x2)+abs(yi[n-i+1]-y2)+abs(zi[n-i+1]-z2);
        x2++; y2++; z2++;
       }
    }
 fprintf(g,"%ld",min);
 return 0;
}