Pagini recente » Cod sursa (job #2181202) | Cod sursa (job #2283793) | Cod sursa (job #1020681) | Cod sursa (job #2029635) | Cod sursa (job #1536535)
#include <cstdio>
#include <algorithm>
#define DIM 100010
using namespace std;
int N, M; long long left, right, mid;
int V[DIM], W[DIM]; long long T[DIM];
inline bool Verif (long long time) {
int ok; long long car = 0;
for (int i = 1; i <= N; i ++) {
car += time / W[i] * 1LL * V[i];
if (car >= M)
return 1;
}
return 0;
}
class InputReader {
public:
InputReader() {}
InputReader(const char *file_name) {
input_file = fopen(file_name, "r");
cursor = 0;
fread(buffer, SIZE, 1, input_file);
}
inline InputReader &operator >>(int &n) {
while(buffer[cursor] < '0' || buffer[cursor] > '9') {
advance();
}
n = 0;
while('0' <= buffer[cursor] && buffer[cursor] <= '9') {
n = n * 10 + buffer[cursor] - '0';
advance();
}
return *this;
}
private:
FILE *input_file;
static const int SIZE = 1 << 17;
int cursor;
char buffer[SIZE];
inline void advance() {
++ cursor;
if(cursor == SIZE) {
cursor = 0;
fread(buffer, SIZE, 1, input_file);
}
}
};
int main () {
InputReader fin ("garaj.in");
freopen ("garaj.out","w", stdout);
fin >> N >> M;
for (int i = 1; i <= N; i ++) {
fin >> V[i] >> W[i];
W[i] *= 2;
}
left = 1; right = M * 1LL * 2000;
while (left <= right) {
mid = left + (right - left) / 2;
if (Verif (mid))
right = mid - 1;
else
left = mid + 1;
}
printf ("%lld ", left);
long long time = left;
for (int i = 1; i <= N; i ++)
T[i] = time / W[i] * 1LL * V[i];
sort (T + 1, T + N + 1);
long long car = 0;
for (int i = N; i >= 1; i --) {
car += T[i];
if (car >= M) {
printf ("%d", N - i + 1);
break;
}
}
return 0;
}