Pagini recente » Cod sursa (job #2681750) | Cod sursa (job #208528) | Cod sursa (job #324062) | Cod sursa (job #773247) | Cod sursa (job #214743)
Cod sursa(job #214743)
#include<stdio.h>
#include<algorithm>
#define NMAX 100024
using namespace std;
typedef struct{
int C,T;
}q;
q V[NMAX];
int S[NMAX];
inline bool cmp(q A,q B)
{
return A.T<B.T;
}
int N,M;
int solve(const int time)
{
int i,sum=0,nr=0;
for(i=1; i<=N && sum<M; ++i)
if( time>=V[i].T )
sum+=(time/V[i].T)*V[i].C,
++nr;
if( sum<M )return 0;
return nr;
}
int main()
{
freopen("garaj.in","r",stdin);
freopen("garaj.out","w",stdout);
scanf("%d%d",&N,&M);
int i,aux;
int tmin=1,tmax=0,tmij;
for(i=1; i<=N; ++i){
scanf("%d%d",&V[i].C,&V[i].T);
V[i].T<<=1;
if( V[i].C < M )
aux=(M/V[i].C)*V[i].T;
else
aux=V[i].T;
if( !tmax || tmax<aux ) tmax=aux;
}
int solt=tmax,solc=0;
while( tmin<=tmax )
{
tmij=(tmin+tmax)>>1;
aux=solve(tmij);
if( aux )
{
solt=tmij;
tmax=tmij-1;
}
else
{
tmin=tmij+1;
}
}
for(i=1; i<=N; ++i)
if( V[i].T<= solt)
S[i]=(solt/V[i].T)*V[i].C;
else
S[i]=-1;
sort(S+1,S+N+1);
int sum=0;
for(i=N; i>=1 && sum<M; --i)
if( S[i]>0 )
sum+=S[i],++solc;
printf("%d %d\n",solt,solc);
return 0;
}