Pagini recente » Cod sursa (job #1087116) | Cod sursa (job #2152164) | Cod sursa (job #1113949) | Cod sursa (job #1898440) | Cod sursa (job #337011)
Cod sursa(job #337011)
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const int N = (1<<17);
const long long M = ((long long)1 << 41);
int n,m,c[N],t[N];
void citire()
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;++i)
{
scanf("%d%d",&c[i],&t[i]);
t[i]<<=1;
}
}
bool ok(long long tt)
{
long long s=0;
for(int i=0;i<n;++i)
{
s+=tt/t[i]*c[i];
if(s>=m)
return false;
}
return true;
}
long long caut()
{
long long i,pas;
for(pas=1 ; pas<=M ; pas<<=1);
for(i=0 ; pas ; pas>>=1)
if(i+pas<=M && ok(i+pas))
i+=pas;
return i+1;
}
bool comp(long long x,long long y)
{
return x>y;
}
void numar(long long tt)
{
int i;
vector<long long> v;
for(i=0;i<n;++i)
v.push_back(tt/t[i]*c[i]);
sort(v.begin(),v.end(),comp);
for(i=0;i<n;++i)
{
m-=v[i];
if(m<=0)
{
printf("%d\n",i+1);
return;
}
}
printf("%d\n",n);
}
void calcul()
{
long long tt=caut();
printf("%lld ",tt);
numar(tt);
}
int main()
{
freopen("garaj.in","r",stdin);
freopen("garaj.out","w",stdout);
citire();
calcul();
return 0;
}