Cod sursa(job #982722)

Utilizator dariusdariusMarian Darius dariusdarius Data 9 august 2013 19:43:53
Problema Garaj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<cstdio>
#include<algorithm>
#include<set>
using namespace std;
struct CAMION
{
    long long t,c;
    inline bool operator<(const CAMION &other) const
    {
        return c>other.c;
    }
} a[100005];
long long n,nr;
long long C[100005];
bool ok(long long timp)
{
    long long sol=0;
    for(long long i=1;i<=n;i++)
        sol+=timp/(2*a[i].t)*a[i].c;
    return sol>=nr;
}
int main()
{
    freopen("garaj.in","r",stdin);
    freopen("garaj.out","w",stdout);
    scanf("%lld%lld",&n,&nr);
    for(long long i=1;i<=n;i++)
        scanf("%lld%lld",&a[i].c,&a[i].t);
    long long ans=2000000000;
    for(long long pas=1<<30;pas;pas>>=1)
        if(ans-pas>=0 && ok(ans-pas))
            ans-=pas;
    for(long long i=1;i<=n;i++)
        C[i]=(ans/(2LL*a[i].t))*a[i].c;
    sort(C+1,C+n+1,greater<long long>());
    long long i,sol=0;
    for(i=1;sol<nr;i++)
        sol+=C[i];
    printf("%lld %lld\n",ans,i-1);
    return 0;
}