Cod sursa(job #125297)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 20 ianuarie 2008 12:25:50
Problema Inundatii Scor 90
Compilator cpp Status done
Runda preONI 2008, Runda 3, Clasele 11-12 Marime 1.13 kb
#include <stdio.h>
#include <stdlib.h>
int n,i,j;
long xi[50000],yi[50000],zi[50000],x1,y3,z1,x2,y2,z2,x,y,z;
long long min=0;
int main()
{
 FILE*f=fopen("inundatii.in","r");
 FILE*g=fopen("inundatii.out","w");
 fscanf(f,"%d",&n);
 for (i=1; i<=n; i++)
   fscanf(f,"%ld%ld%ld",&xi[i],&yi[i],&zi[i]);
 if (n % 2==1)
   {
    x1=xi[n / 2 + 1]-1; y3=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]-y3)+abs(zi[i]-z1);
       x1--; y3--; 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; y3=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]-y3)+abs(zi[i]-z1);
        x1--; y3--; 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,"%lld",min);
 return 0;
}