Cod sursa(job #1393372)

Utilizator EpictetStamatin Cristian Epictet Data 19 martie 2015 12:51:40
Problema Garaj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("garaj.in");
ofstream fout ("garaj.out");
typedef struct { int c, t; } art;
unsigned int N, M, S[100010];
art V[100010];

unsigned int Verif(unsigned int timp)
{
    unsigned int v = 0;
    for (int i = 1; i <= N; i++) {
        v += timp / V[i].t * V[i].c;
    }
    return v;
}

int main()
{
    fin >> N >> M;
    for (int i = 1; i <= N; i++)
    {
        fin >> V[i].c >> V[i].t;
        V[i].t *= 2;
    }

    unsigned int st = 1, dr = (1 << 31), mij, cmin, tmin;
    while (st <= dr)
    {
        mij = (st + dr) / 2;
        cmin = Verif(mij);
        if (cmin < M) st = mij + 1;
        else if (cmin > M) dr = mij - 1, tmin = mij;
        else tmin = mij, st = dr + 1;
    }

    fout << tmin << ' ';

    for (int i = 1; i <= N; i++) {
        S[i] = tmin / V[i].t * V[i].c;
    }

    sort (S + 1, S + 1 + N);

    int val = 0;
    for (int i = N; i >= 1; i--)
    {
        val += S[i];
        if (val >= M)
        {
            fout << N - i + 1 << '\n';
            break;
        }
    }

    fout.close();
    return 0;
}