Cod sursa(job #498544)

Utilizator dushmiMihai-Alexandru Dusmanu dushmi Data 5 noiembrie 2010 14:23:45
Problema Garaj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<cstdio>
#include<algorithm>
using namespace std;
int n,st,c[1<<17],t[1<<17],a[1<<17];
void read()
{
    freopen("garaj.in","r",stdin);
    freopen("garaj.out","w",stdout);
    scanf("%d%d",&n,&st);
    for(int i=1;i<=n;i++)
        scanf("%d%d",&c[i],&t[i]), t[i]*=2;
}
int sticle(int timp)
{
    long long tot=0;
    for(int i=1;i<=n;i++)
        tot+=(long long)(timp/t[i])*c[i];
    int x;
    if(tot>(1<<30))
        x=1<<30;
    else x=tot;
    return x;
}
int cautb()
{
    int i=0,pas=1<<30;
    for(i=0;pas;pas>>=1)
        if(sticle(i+pas)<st)
            i+=pas;
    return i+1;
}
bool comp(int x,int y)
{
    return x>y;
}
int camioane(int timp)
{
    for(int i=1;i<=n;i++)
        a[i]=(timp/t[i])*c[i];
    sort(a+1,a+n+1,comp);
    int sc=0,nrc=0;
    for(int i=1;i<=n;i++)
    {
        sc+=a[i];
        nrc++;
        if(sc>=st)
            break;
    }
    return nrc;

}
int main()
{
    read();
    int tmin=cautb();
    printf("%d ",tmin);
    printf("%d\n",camioane(tmin));
    return 0;
}