Cod sursa(job #3319226)

Utilizator andreibancescuAndrei-Stefan Bancescu andreibancescu Data 31 octombrie 2025 12:26:14
Problema Garaj Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 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=2000000,Tmin=0;
    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;
    fin.close();
    fout.close();
    return 0;
}