Cod sursa(job #982079)

Utilizator stefan.friptuPetru Stefan Friptu stefan.friptu Data 8 august 2013 14:08:05
Problema Garaj Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <cstdio>
#include <cstdlib>
 
using namespace std;
 
struct camion {
    int c,t;
};
 
camion cam[100010];
int sol;
 
int compar (const void *p, const void *q)
{
    camion x=*(camion*)p,y=*(camion*)q;
    if((sol/x.t)*x.c<(sol/y.t)*y.c)
        return 1;
    if(((sol/x.t)*x.c)>(sol/y.t)*y.c)
        return -1;
    return 0;
}
 
int main()
{
    freopen("garaj.in","r",stdin);
    freopen("garaj.out","w",stdout);
     
    int n,m,a,b,i,st,dr,k,nr;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++){
        scanf("%d%d",&a,&b);
        cam[i].c=a;
        cam[i].t=b*2;
    }
     
    st=1;
    dr=22500;
     
    while(st<=dr)
    {
        k=(st+dr)/2;
        nr=0;
        for(i=1;i<=n;i++)
            nr+=(k/cam[i].t)*cam[i].c;
        if(nr>=m)
        {
            sol=k;
            dr=k-1;
        }
        else
            st=k+1;
    }
     
    nr=0;
    qsort(cam+1,n,sizeof(cam[0]),compar);
     
    for(i=1;i<=n && nr<m;i++)
        nr+=(sol/cam[i].t)*cam[i].c;    
     
    printf("%d %d\n",sol,i-1);
     
    return 0;
}