Pagini recente » Cod sursa (job #2533771) | Cod sursa (job #1439299) | Cod sursa (job #136266) | Cod sursa (job #1647450) | Cod sursa (job #557920)
Cod sursa(job #557920)
#include<fstream>
#define dmax 100010
#define inf 1000010
using namespace std;
int n,m;
int t[dmax],c[dmax];
int mint,nr;
int s[dmax];
void citire()
{
int i;
ifstream fin("garaj.in");
fin>>n>>m;
for (i=1; i<=n; i++)
fin>>c[i]>>t[i];
fin.close();
}
int verif(int timp)
{
int i,s=0;
for (i=1; i<=n; i++)
{
s += timp / (2 * t[i]) * c[i];
if (s >= m)
return 1;
}
return 0;
}
void caut(int st, int dr)
{
int mijl = (st + dr) / 2;
if (st <= dr)
if (verif(mijl) == 1)
{
mint = mijl;
caut(st, mijl-1);
} else
caut(mijl+1, dr);
}
void solve()
{
int i,sum=0;
for (i=1; i<=n; i++)
s[i] = mint / (2 * t[i]) * c[i];
sort(s+1, s+n+1);
for (i=n; i>=1; i--)
{
sum += s[i]; nr++;
if (sum >= m)
break;
}
}
void afisare()
{
ofstream fout("garaj.out");
fout<<mint<<" "<<nr<<'\n';
fout.close();
}
int main()
{
citire();
caut(1,inf);
solve();
afisare();
return 0;
}