Cod sursa(job #1599137)

Utilizator touristGennady Korotkevich tourist Data 13 februarie 2016 17:26:30
Problema Garaj Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>
#define Nmax 100005

using namespace std;

int C[Nmax],T[Nmax],n,m,v[Nmax];

inline bool Ok(long long x)
{
    int i;
    long long cnt=0;
    for(i=1;i<=n;++i)
    {
        cnt+=1LL*(x/T[i])*C[i];
        if(cnt>=m) return 1;
    }
    return 0;
}

int main()
{
    int i;
    ifstream cin("garaj.in");
    ofstream cout("garaj.out");
    cin>>n>>m;
    for(i=1;i<=n;++i)
    {
        cin>>C[i]>>T[i];
        T[i]*=2;
    }
    long long st=0,dr=2000000000000,mij,sol;
    while(st<=dr)
    {
        mij=((st+dr)>>1);
        if(Ok(mij))
        {
            sol=mij; dr=mij-1;
        }
        else st=mij+1;
    }
    cout<<sol<<" ";
    for(i=1;i<=n;++i)
        if(1LL*(sol/T[i])*C[i] >=m)
        {
            cout<<"1\n"; return 0;
        }
        else v[i]=(sol/T[i])*C[i];
    sort(v+1,v+n+1);
    long long sum;
    for(i=n,sum=v[n];i && sum<m;--i,sum+=v[i]);
    cout<<n-i+1<<"\n";
    return 0;
}