Cod sursa(job #3338246)

Utilizator ligmasigmaolimpiadaVlad Bratucu ligmasigmaolimpiada Data 1 februarie 2026 20:51:09
Problema Garaj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

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


bool can(long long X,int N,long long M,vector<int>& C,vector<int>& T){
    long long total=0;
    for(int i=0;i<N;i++){
        long long trips=X/(2LL*T[i]);
        if(trips>0){
            total+=trips*C[i];
            if(total>=M)return true;
        }
    }
    return false;
}

int main(){
    int N;
    long long M;
    fin>>N>>M;

    vector<int> C(N),T(N);
    for(int i=0;i<N;i++){
        fin>>C[i]>>T[i];
    }

    long long left=0,right=1;
    while(!can(right,N,M,C,T)){
        right*=2;
    }

    while(left<right){
        long long mid=(left+right)/2;
        if(can(mid,N,M,C,T)){
            right=mid;
        }else{
            left=mid+1;
        }
    }

    long long Tmin=left;

    vector<long long> capacity;
    for(int i=0;i<N;i++){
        long long trips=Tmin/(2LL*T[i]);
        if(trips>0){
            capacity.push_back(trips*C[i]);
        }
    }

    sort(capacity.begin(),capacity.end(),greater<long long>());

    long long sum=0;
    int Nrmin=0;
    for(long long x:capacity){
        sum+=x;
        Nrmin++;
        if(sum>=M)break;
    }

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