Pagini recente » Cod sursa (job #103433) | Cod sursa (job #1308664) | Cod sursa (job #103467) | Cod sursa (job #2265098) | Cod sursa (job #961256)
Cod sursa(job #961256)
#include<cstdio>
#define NM 100100
#include<algorithm>
using namespace std;
FILE *f=fopen("garaj.in","r");
FILE *g=fopen("garaj.out","w");
int i,n,m,c[NM],t[NM],mij,ls,ld,best,sol;
int h[NM];
int check(int x);
void eliminate(int x);
int main ()
{
fscanf(f,"%d%d",&n,&m);
ld=m;
for(i=1;i<=n;++i)
{
fscanf(f,"%d%d",&c[i],&t[i]);
t[i]*=2;
if(1LL*(m+c[i]-1)/c[i]*t[i]<ld)
ld=1LL*(m+c[i]-1)/c[i]*t[i];
}
ls=1;
while(ls<=ld)
{
mij=(ls+ld)>>1;
if(check(mij))
{
best=mij;
ld=mij-1;
}
else
ls=mij+1;
}
eliminate(best);
fprintf(g,"%d %d",best,sol);
return 0;
}
int check(int x)
{
long long S=0;
for(i=1;i<=n;++i)
{
S+=x/t[i]*c[i];
if(S>=m)
return 1;
}
return 0;
}
void eliminate(int x)
{
int S=0;
sol=n;
for(i=1;i<=n;++i)
{
h[i]=x/t[i]*c[i];
S+=h[i];
}
sort(h+1,h+n+1);
for(i=1;i<=n;++i)
{
if(S-h[i]>=m)
S-=h[i],sol--;
else
break;
}
}