Pagini recente » Cod sursa (job #1878719) | Cod sursa (job #1165798) | Cod sursa (job #2563503) | Cod sursa (job #649061) | Cod sursa (job #125052)
Cod sursa(job #125052)
# include <stdio.h>
# define input "inundatii.in"
# define output "inundatii.out"
# define max 50001
long rez,a[max][3],st1,st2,st3,dr1,dr2,dr3,mij1,mij2,mij3;
int n,i,j;
int gasit1,gasit2,gasit3;
long s1,s2,s3,ss1,ss2,ss3,sd1,sd2,sd3;
long modul(long a)
{
return a >= 0 ? a : -a;
}
long val;
int main()
{
freopen(input,"r",stdin);
freopen(output,"w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%ld%ld%ld",&a[i][0],&a[i][1],&a[i][2]);
st1 = a[n][0];
dr1 = a[1][0];
st2 = a[n][1];
dr2 = a[1][1];
st3 = a[n][2];
dr3 = a[1][2];
gasit1 = gasit2 = gasit3 = 0;
rez= 0;
val =0;
while(!gasit1 || !gasit2 || !gasit3)
{
mij1 = (st1+dr1)>>1;
mij2 = (st2+dr2)>>1;
mij3 = (st3+dr3)>>1;
s1 = s2 = s3 = 0;
ss1 = ss2 = ss3 = 0;
sd1 = sd2 = sd3 = 0;
for(i=1;i<=n;i++)
{
if(!gasit1)
{
s1+=modul(mij1-a[i][0] + i-1);
ss1+= modul(mij1-a[i][0]-1 + i-1);
sd1+= modul(mij1-a[i][0]+1 + i-1);
}
if(!gasit2)
{
s2+=modul(mij2-a[i][1] + i-1);
ss2+= modul(mij2-a[i][1]-1 + i-1);
sd2+= modul(mij2-a[i][1]+1 + i-1);
}
if(!gasit3)
{
s3+=modul(mij3-a[i][2] + i-1);
ss3+= modul(mij3-a[i][2]-1 + i-1);
sd3+= modul(mij3-a[i][2]+1 + i-1);
}
}
//x
if(!gasit1)
if(ss1 >= s1 && sd1 >= s1)
{
rez+=s1,gasit1=1;
}
else
if(ss1 < s1)
st1 = mij1;
else
dr1 = mij1;
//y
if(!gasit2)
if(ss2 >= s2 && sd2 >= s2)
{
rez+=s2,gasit2=1;
}
else
if(ss2 < s2)
st2 = mij2;
else
dr2 = mij2;
//z
if(!gasit3)
if(ss3 >= s3 && sd3 >= s3)
{
rez+=s3,gasit3=1;
}
else
if(ss3 < s3)
st3 = mij3;
else
dr3 = mij3;
}
printf("%ld",rez);
return 0;
}