Cod sursa(job #3319195)

Utilizator andreibancescuAndrei-Stefan Bancescu andreibancescu Data 31 octombrie 2025 01:29:24
Problema Garaj Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <bits/stdc++.h>
using namespace std;

int n;
long long m;
int c[100005], t[100005];
int p[100005];

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

    fin >> n >> m;
    for(int i = 1; i <= n; i++) {
        fin >> c[i] >> t[i];
        p[i] = i;
    }

    // sortam camioanele dupa timp crescator
    for(int i = 1; i <= n; i++)
        for(int j = i+1; j <= n; j++)
            if(t[p[i]] > t[p[j]]) swap(p[i], p[j]);

    int st = 1, dr = 1000000, Tmin = -1;
    while(st <= dr) {
        int mid = (st + dr) / 2;
        long long cap = 0;
        for(int i = 1; i <= n; i++) {
            int camion = p[i];
            if(t[camion] > mid) break;
            long long drumuri = (mid / (2 * t[camion]));
            cap += drumuri * c[camion];
            if(cap >= m) break;
        }
        if(cap >= m) {
            Tmin = mid;
            dr = mid - 1;
        } else {
            st = mid + 1;
        }
    }

    // numaram camioanele necesare pentru Tmin
    long long cap = 0;
    int cnt = 0;
    for(int i = 1; i <= n; i++) {
        int camion = p[i];
        if(t[camion] > Tmin) break;
        long long drumuri = (Tmin / (2 * t[camion]));
        cap += drumuri * c[camion];
        cnt++;
        if(cap >= m) break;
    }

    fout << Tmin << " " << cnt;
    return 0;
}