Pagini recente » Cod sursa (job #1093934) | Cod sursa (job #1813069) | Cod sursa (job #570569) | Cod sursa (job #3194784) | Cod sursa (job #1886415)
#include <stdio.h>
long K, N, P;
int good(long T)
{
register long i, t, n1, n2, x;
n1 = K, n2 = N-K;
for (i = 1; i <= P; i++)
{
t = T/i;
x = ((n2 < (t>>1)) ? n2 : (t>>1));
n2 -= x;
n1 -= (t - (x<<1));
if (n1 <= 0 && n2 <= 0) return 1;
}
return 0;
}
long solve()
{
long l, r, m;
for (l = 0, r = 2*N-K; l < r; )
{
m = l/2 + r/2 + (l%2 && r%2);
if (!good(m))
l = m+1;
else
r = m;
}
return l;
}
void read_data()
{
FILE *fi = fopen("proc.in", "rt");
fscanf(fi, "%ld %ld %ld", &N, &K, &P);
fclose(fi);
}
void print(long res)
{
FILE *fo = fopen("proc.out", "wt");
fprintf(fo, "%ld\n", res);
fclose(fo);
}
int main()
{
read_data();
print(solve());
return 0;
}