Pagini recente » Cod sursa (job #430515) | Cod sursa (job #742308) | Cod sursa (job #2360807) | Cod sursa (job #2931219) | Cod sursa (job #1350027)
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<cstring>
#include<set>
#include<map>
#include<cmath>
using namespace std ;
#define maxn 100005
int N, M ;
struct camion
{
int c, t ;
};
camion cam[maxn] ;
int cat_duce[maxn] ;
int cate, sol ;
bool ok(int timp)
{
int ramas = M ;
for(int i = 1; i <= N; ++i)
{
if( ramas <= cam[i].c * ( timp / cam[i].t ) )
return true ;
ramas -= cam[i].c * ( timp / cam[i].t ) ;
}
return false ;
}
int main()
{
std::ios_base::sync_with_stdio(false) ;
freopen("garaj.in", "r", stdin);
freopen("garaj.out", "w", stdout);
cin >> N >> M ;
for(int i = 1; i <= N; ++i)
{
cin >> cam[i].c >> cam[i].t ;
cam[i].t *= 2 ;
}
int st = 0, dr = ( 1 << 30 ) ;
while( st <= dr )
{
int mij = ( st + dr ) >> 1 ;
if( ok(mij) == true )
{
sol = mij ;
dr = mij - 1 ;
}
else
st = mij + 1 ;
}
for(int i = 1; i <= N; ++i)
{
int kt = cam[i].c * ( sol / cam[i].t ) ;
cat_duce[i] = kt ; ;
}
sort( cat_duce + 1, cat_duce + N + 1 ) ;
int ramas = M ;
for(int i = N; i > 0; --i)
{
if( ramas <= 0 )
break ;
ramas -= cat_duce[i] ;
++cate ;
}
cout << sol << " " << cate ;
return 0 ;
}