Pagini recente » Cod sursa (job #899795) | Cod sursa (job #1854044) | Cod sursa (job #1541669) | Cod sursa (job #583293) | Cod sursa (job #1393939)
#include <fstream>
#include <algorithm>
#define DIM 8192
using namespace std;
ifstream fin ("garaj.in");
ofstream fout ("garaj.out");
typedef struct { int c, t; } art;
int N, M;
unsigned int S[100010];
art V[100010];
char P[DIM + 16], *now;
unsigned int Verif(long long timp)
{
long long v = 0;
for (int i = 1; i <= N; i++) {
v += timp / V[i].t * V[i].c;
if (v > M) return M + 1;
}
return v;
}
void Verif()
{
if (*now == NULL)
{
fin.get(P, DIM, '\0');
now = P;
}
}
int Get_Num()
{
while (*now < '0' || *now > '9')
{
now++;
Verif();
}
int number = 0;
while (*now >= '0' && *now <= '9')
{
number = number * 10 + *now - '0';
now++;
Verif();
}
return number;
}
int main()
{
now = P;
Verif();
N = Get_Num();
M = Get_Num();
for (int i = 1; i <= N; i++)
{
V[i].c = Get_Num();
V[i].t = Get_Num();
V[i].t *= 2;
}
long long st = 1, dr = (1LL << 60), mij, cmin, tmin;
while (st <= dr)
{
mij = (st + dr) / 2;
cmin = Verif(mij);
if (cmin < M) st = mij + 1;
else if (cmin > M) dr = mij - 1, tmin = mij;
else tmin = mij, st = dr + 1;
}
fout << tmin << ' ';
for (int i = 1; i <= N; i++) {
S[i] = tmin / V[i].t * V[i].c;
}
sort (S + 1, S + 1 + N);
int val = 0;
for (int i = N; i >= 1; i--)
{
val += S[i];
if (val >= M)
{
fout << N - i + 1 << '\n';
break;
}
}
fout.close();
return 0;
}