Pagini recente » Cod sursa (job #1025251) | Cod sursa (job #1627222) | Cod sursa (job #1866650) | Cod sursa (job #1629404) | Cod sursa (job #951219)
Cod sursa(job #951219)
#include<fstream>
#define NM 100100
#include<algorithm>
using namespace std;
ifstream f("garaj.in");
ofstream g("garaj.out");
long long i,n,m,c[NM],h[NM],t[NM],ls,ld,mij,best,sol;
int check(int x);
void eliminate(int x);
int main ()
{
f>>n>>m;
ld=m;
for(i=1;i<=n;++i)
{
f>>c[i]>>t[i];
t[i]*=2;
if((m+c[i]-1)/c[i]*t[i]<ld)
ld=(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);
g<<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)
{
long long 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;
}
}