Cod sursa(job #975268)

Utilizator thewildnathNathan Wildenberg thewildnath Data 19 iulie 2013 16:59:13
Problema Garaj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<stdio.h>
#include<algorithm>
using namespace std;

typedef struct cam
{
    int c,t;
}cam;
cam v[100002];
int n,m;

int cmp(cam a,cam b)
{
    if(a.c>b.c)
        return 1;
    return 0;
}

int bun(int x)
{
    int s=0,a1,a2,i;
    for(i=1;i<=n;++i)
    {
        a1=x/v[i].t;
        a2=a1*v[i].c;
        s+=a2;
        if(s>=m)
            return 1;
    }
    return 0;
}

void caut()
{
    int s,d,m,l,i,a,x;
    s=l=0;
    d=1000000001;
    while(s<=d)
    {
        m=(s+d)/2;
        if(bun(m))
        {
            l=m;
            d=m-1;
        }
        else
            s=m+1;
    }
    printf("%d ",l);

    for(i=1;i<=n;++i)
        v[i].c=v[i].c*(l/v[i].t);
    sort(v+1,v+1+n,cmp);
    a=x=0;
    for(i=1;i<=n;++i)
    {
        x+=v[i].c;
        ++a;
        if(x>=m)
            break;
    }
    printf("%d\n",a);


}


int main()
{
    freopen("garaj.in","r",stdin);
    freopen("garaj.out","w",stdout);
    int i;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;++i)
    {
        scanf("%d%d",&v[i].c,&v[i].t);
        v[i].t=v[i].t*2;
    }
    caut();

    return 0;
}