Cod sursa(job #137506)

Utilizator bogdan2412Bogdan-Cristian Tataroiu bogdan2412 Data 17 februarie 2008 12:29:58
Problema Garaj Scor 100
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasa a 10-a Marime 0.97 kb
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

#define MAXN 100005

int N, K;
int c[MAXN], t[MAXN];

vector<long long> v;

inline int cmp( long long a, long long b )
{
	return a > b;
}

inline int isOk( long long time, int solve )
{
	long long can = 0;
	for (int i = 0; i < N; i++)
	{
		long long curCan = (time / t[i]) * c[i];
		can += curCan;

		if (!solve)
			if (can >= K)
				return 1;
			else;
		else
			v.push_back(curCan);
	}

	if (solve)
	{
		sort( v.begin(), v.end(), cmp );

		can = 0;
		for (int i = 0; i < N; i++)
		{
			can += v[i];
			if (can >= K)
				return i + 1;
		}
	}
	return 0;
}

int main()
{
	freopen("garaj.in", "rt", stdin);
	freopen("garaj.out", "wt", stdout);

	scanf("%d %d", &N, &K);
	for (int i = 0; i < N; i++)
		scanf("%d %d", c + i, t + i),
		t[i] *= 2;

	long long rez = 0, step = 1LL << 41;
	for (; step; step >>= 1)
		if (!isOk(rez + step, 0))
			rez += step;

	rez++;
	printf("%lld %d\n", rez, isOk(rez, 1));

	return 0;
}