Pagini recente » Cod sursa (job #889942) | Cod sursa (job #302470) | Cod sursa (job #2938604) | Cod sursa (job #533830) | Cod sursa (job #987254)
Cod sursa(job #987254)
#include<fstream>
#include<algorithm>
using namespace std;
int n,m,C[100100],T[100100],ord[100100];
int solC,solT,nr[100100];
inline bool Posibil(int t)
{
int i,aux=m;
for(i=1;i<=n && aux>0;i++)
aux-=C[i]*(t/(2*T[i]));
if(aux>0)
return false;
return true;
}
inline void CautareBinara()
{
int st,dr,mij;
st=0;
dr=solT=2000000000;
while(st<=dr)
{
mij=st+(dr-st)/2;
if(Posibil(mij))
{
solT=mij;
dr=mij-1;
}
else
st=mij+1;
}
}
inline bool Sortare(int a,int b)
{
return nr[a]>nr[b];
}
int main()
{
int i;
ifstream fin("garaj.in");
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>C[i]>>T[i];
ord[i]=i;
}
fin.close();
CautareBinara();
for(i=1;i<=n;i++)
nr[i]=C[i]*(solT/(2*T[i]));
sort(ord+1,ord+n+1,Sortare);
int aux=m;
for(i=1;i<=n && aux>0;i++)
aux-=nr[ord[i]];
solC=i-1;
ofstream fout("garaj.out");
fout<<solT<<' '<<solC<<"\n";
fout.close();
return 0;
}