Cod sursa(job #1886415)

Utilizator NinjaCubeMihai Radovici NinjaCube Data 20 februarie 2017 21:11:45
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#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;
}