Cod sursa(job #2719867)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 10 martie 2021 13:14:16
Problema Garaj Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <bits/stdc++.h>

#define NMAX 100005
using namespace std;

ifstream fin("garaj.in");
ofstream fout("garaj.out");

struct chestie{
    int c, t;
}v[NMAX];
int vec[NMAX];

int main()
{
    int n, m;
    fin >> n >> m;

    int valM = 0;
    for(int i = 1; i <= n; ++i){
        fin >> v[i].c >> v[i].t;

        v[i].t *= 2;
        valM = max(valM, m / v[i].c * v[i].t);
    }
    int st = 1;
    int dr = valM;
    int best = -1;
    while(st <= dr){
        int mij = (st + dr) / 2;
        int sum = 0;
        for(int i = 1; i <= n; ++i)
            sum += (mij / v[i].t) * v[i].c;
        if(sum >= m){
            best = mij;
            dr = mij - 1;
        }
        else st = mij + 1;
    }

    for(int i = 1; i <= n; ++i)
        vec[i] = (best / v[i].t) * v[i].c;

    sort(vec + 1, vec + n + 1);

    int sum = 0, cnt = 0;
    for(int i = n; i >= 1 && sum < m; --i){
        sum += vec[i];
        ++cnt;
    }

    fout << best << ' ' << cnt << '\n';
    return 0;
}