Pagini recente » Cod sursa (job #831200) | Cod sursa (job #134127) | Cod sursa (job #1046143) | Cod sursa (job #206284) | Cod sursa (job #1111815)
#include <fstream>
#include <algorithm>
using namespace std;
const char InFile[]="garaj.in";
const char OutFile[]="garaj.out";
const int MaxN=100111;
ifstream fin(InFile);
ofstream fout(OutFile);
struct camion
{
int T,C;
};
int N,M,C[MaxN];
camion V[MaxN];
inline bool solve(long long t)
{
int val=M;
for(register int i=1;i<=N;++i)
{
val-=(t/(2*V[i].T))*V[i].C;
if(val<=0)
{
return true;
}
}
return false;
}
int main()
{
fin>>N>>M;
for(register int i=1;i<=N;++i)
{
fin>>V[i].C>>V[i].T;
}
fin.close();
int st=0,dr=2000111000;
int sol=2000111000;
while(st<=dr)
{
int mij=(st+dr)>>1;
if(solve(mij))
{
dr=mij-1;
sol=mij;
}
else
{
st=mij+1;
}
}
int sol2=0;
for(register int i=1;i<=N;++i)
{
C[i]=(sol/(V[i].T*2))*V[i].C;
}
sort(C+1,C+1+N);
int S=0;
for(register int i=N;i>=1;--i)
{
if(M<=S)
{
break;
}
S+=C[i];
++sol2;
}
fout<<sol<<" "<<sol2;
fout.close();
return 0;
}