Pagini recente » Cod sursa (job #657254) | Cod sursa (job #2646029) | Cod sursa (job #505978) | Cod sursa (job #757567) | Cod sursa (job #337122)
Cod sursa(job #337122)
#include <fstream>
#include <algorithm>
using namespace std;
#define MAX_N 100005
ifstream fin ("garaj.in");
ofstream fout("garaj.out");
const int Tmax = 20000000;
struct gar
{
int c, t, g;
} V[MAX_N];
int N, logT, K;
struct cmp
{
bool operator()(const gar &a, const gar &b) const
{
return a.g > b.g;
}
};
void citire()
{
fin >> N >> K;
for(int i = 1; i <= N; ++i)
{
fin >> V[i].c >> V[i].t;
V[i].t <<= 1;
}
for(logT = 1; logT <= Tmax; logT <<= 1);
}
int search(int k)
{
int cap = 0;
for(int i = 1; i <= N; ++i)
cap += k/V[i].t*V[i].c;
if(cap >= K) return 1;
return 0;
}
void solve()
{
int i, lg;
for(i = Tmax, lg = logT; lg; lg >>= 1)
if(i - lg > 0 && search(i - lg))
i -= lg;
for(int j = 1; j <= N; ++j)
V[j].g = i/V[j].t*V[j].c;
sort(V+1, V+N+1, cmp());
int cap = 0,nr = 0;
for(int j = 1; j <= N; ++j)
if((cap += V[j].g) >= K)
break;
else
++nr;
fout << i << " " << nr+1 << "\n";
}
int main()
{
citire();
solve();
}