Pagini recente » Cod sursa (job #1470976) | Borderou de evaluare (job #1036684) | Cod sursa (job #1401079) | Istoria paginii preoni-2008/clasament/runda-finala/5-8 | Cod sursa (job #124928)
Cod sursa(job #124928)
#include <stdio.h>
#define NMax 50001
#define INF 1000000000
int n, c[NMax][3];
void read();
//int trivial(int co);
long long sum(int p, int co);
void solve();
int main()
{
read();
solve();
return 0;
}
/*int trivial(int co)
{
int p, min = INF, s;
for (p = 0; p < 100; p++)
{
s = sum(p, co);
if (s < min)
min = s;
printf("%d %d\n", p, s);
}
return min;
}*/
long long sum(int p, int co)
{
int i;
long long s = 0;
for (i = 0; i < n; i++)
{
if (p + i > c[i][co])
s += p + i - c[i][co];
else
s -= p + i - c[i][co];
}
return s;
}
void solve()
{
int co, p, low, high, med;
long long cost = 0, min;
for (co = 0; co < 3; co++)
{
min = INF;
min *= 1000;
min *= 1000;
low = 0;
high = 100000000;
while (high - low > 2)
{
med = (high + low) / 2;
if (sum(med, co) >= sum(med + 1, co))
low = med;
else
high = med;
}
for (p = med - 5; p <= med + 5; p++)
if (sum(p, co) < min)
min = sum(p, co);
cost += min;
}
FILE *fout = fopen("inundatii.out", "wt");
fprintf(fout, "%lld\n", cost);
fclose(fout);
}
void read()
{
int i;
FILE *fin = fopen("inundatii.in", "rt");
fscanf(fin, "%d", &n);
for (i = 0; i < n; i++)
fscanf(fin, "%d %d %d", &c[i][0], &c[i][1], &c[i][2]);
fclose(fin);
}