Cod sursa(job #2975006)

Utilizator VmanDuta Vlad Vman Data 5 februarie 2023 07:24:23
Problema Garaj Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

#define Nmax 100001

int n, m;
int c[Nmax], t[Nmax];

int main() {
    freopen("garaj.in", "r", stdin);
    freopen("garaj.out", "w", stdout);

    cin >> n >> m;
    for (int i = 0; i < n; ++i) {
        cin >> c[i] >> t[i];
        t[i] *= 2;
    }
    
    long long st = 0, dr = (long long)m * t[0];
    while (st < dr) {
        int mid = (st + dr) >> 1;
        int capacity = 0;
        for (int i = 0; i < n && capacity < m; ++i) {
            int drives = mid / t[i];
            capacity += drives * c[i];
        }
        
        if (capacity < m) {
            st = mid + 1;
        } else {
            dr = mid;
        }
    }
    
    vector<int> cap;
    for (int i = 0; i < n; ++i) {
        int drives = st / t[i];
        cap.push_back(drives * c[i]);
    }
    sort(cap.begin(), cap.end());
    int cnt = 0;
    for (int i = n - 1; i >= 0 && m > 0; --i) {
        m -= cap[i];
        ++cnt;
    }
    cout << st << " " << cnt << "\n";
    
    return 0;
}