Pagini recente » Cod sursa (job #2871536) | Rating Arghire Diana (arghirediana) | Cod sursa (job #380905) | Cod sursa (job #2388815) | Cod sursa (job #2291416)
#include <fstream>
#include <algorithm>
#include <cstring>
std::ifstream fin("garaj.in");
std::ofstream fout("garaj.out");
static const int NMAX = 1e5+5;
int n, sticle, logN;
char s[15];
int ns;
struct tir{
int capacitate, timp, coef;
} v[NMAX];
bool cmp(const tir &tir1, const tir &tir2)
{
return tir1.coef < tir2.coef;
}
bool Check(int x)
{
long long int s = 0;
for(int i =1; i<= n; ++i)
{
s+= v[i].capacitate*(x/v[i].timp);
}
if(s < sticle)
return true;
return false;
}
inline int getnum()
{
int x=0;
while (s[ns]&&s[ns]!=' ')
x=x*10+s[ns++]-'0';
ns++;
return x;
}
int main()
{
fin >> n >> sticle;
fin.get();
for(int i= 1; i<=n; ++i)
{
memset(s,0,sizeof(s));
ns =0;
fin.getline(s,15);
v[i].capacitate = getnum();
v[i].timp = getnum()*2;
}
logN = 1 << 30;
int k = 0;
for(int pas = logN; pas; pas >>=1)
{
if(Check(k+pas))
k+=pas;
}
fout << k +1 << " ";
int t = k+1;
int z = 0;
for(int i =1; i<= n; ++i){
v[i].coef = (t / v[i].timp) * v[i].capacitate;
}
std::sort(v+1,v+n+1,cmp);
int ct = 0;
while(sticle>0 && n >= 1)
{
sticle-=v[n].coef;
ct++;
n--;
}
fout << ct;
return 0;
}