Pagini recente » Cod sursa (job #419705) | Cod sursa (job #1984843) | Cod sursa (job #1024725) | Cod sursa (job #1654833) | Cod sursa (job #132784)
Cod sursa(job #132784)
Utilizator |
Adrian Diaconu DITzoneC |
Data |
6 februarie 2008 17:06:23 |
Problema |
Garaj |
Scor |
Ascuns |
Compilator |
cpp |
Status |
done |
Runda |
|
Marime |
0.74 kb |
#include <stdio.h>
#include <algorithm>
using namespace std;
#define nmax 100111
#define FOR(i,s,d) for(i=(s);i<(d);++i)
#define mp make_pair
#define f first
#define s second
#define pt(i) (1<<(i))
int n,m,sol,C[nmax],T[nmax];
int MIN(int a,int b) { return a<b?a:b; }
int doit(int x)
{
int aux=m,i;
FOR(i,0,n)
if((aux-=x/T[i]*C[i])<=0)
return 1;
return 0;
}
int main()
{
freopen("garaj.in","r",stdin);
freopen("garaj.out","w",stdout);
int i,j=0;
scanf("%d %d",&n,&m);
FOR(i,0,n)
scanf("%d %d",&C[i],&T[i]);
for(i=30;i>=0;--i)
if(!doit(sol+pt(i)))
sol+=pt(i);
printf("%d ",2*(sol+1));
FOR(i,0,n)
C[i]=(sol+1)/T[i]*C[i];
sort(C,C+n);
reverse(C,C+n);
FOR(i,0,n)
if((j+=C[i])>=m)
break;
printf("%d\n",i+1);
return 0;
}