Cod sursa(job #3338072)

Utilizator mmateiMatei Barbu mmatei Data 31 ianuarie 2026 12:00:23
Problema Garaj Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>
#include <algorithm>

#define ll long long

using namespace std;

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

ll n,m,c[100001],t[100001],s[100001],st,totals;

ll cb(ll timp){
    ll total=0;
    for(ll i=1;i<=n;i++){
        ll nrj=timp/(2*t[i]);
        ll stic=c[i]*nrj;
        total+=stic;
    }
    return total;
}


int main()
{
    fin>>n>>m;
    for(ll i=1;i<=n;i++){
        fin>>c[i]>>t[i];
        totals+=t[i];
    }
    ll st=0,dr=1e15;
    ll sol=dr;
    while(st<=dr){
        ll mid=st+(dr-st)/2;
        if(cb(mid)>=m){
            dr=mid-1,sol=mid;
        }else st=mid+1;
    }

    int ind=0;
    for(int i=1;i<=n;i++){
        if(t[i]<=sol){
            ll drumuri=(sol-t[i])/(2*t[i])+1;
            s[ind++]=drumuri*c[i];
        }
    }

    sort(s+1,s+ind+1,greater<ll>());


    ll sum=0,nrmin=0;
    for(int i=1;i<=ind;i++){
        sum+=s[i];
        nrmin++;
        if(sum>=m)break;
    }

    fout<<sol<<" "<<nrmin;
    return 0;
}