Pagini recente » Cod sursa (job #2467378) | Cod sursa (job #1924789) | Cod sursa (job #209100) | Cod sursa (job #2728716) | Cod sursa (job #3163554)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin ("garaj.in");
ofstream cout ("garaj.out");
int main ()
{
int lungime , total;
cin >> lungime >> total;
int capacitate[100001] , durata[100001];
for (int indice = 1 ; indice <= lungime ; indice++)
{ cin >> capacitate[indice] >> durata[indice]; durata[indice] <<= 1; }
int stanga = 1 , dreapta = 2e9 , durata_transport = 0;
while (stanga <= dreapta)
{
long long cantitate_transportata = 0;
const int limita = (stanga + dreapta) >> 1;
for (int indice = 1 ; indice <= lungime && cantitate_transportata < total ; indice++)
{ cantitate_transportata += limita / durata[indice] * capacitate[indice]; }
if (total <= cantitate_transportata)
{ dreapta = limita - 1; durata_transport = limita; }
else
{ stanga = limita + 1; }
}
int optiuni[100001];
for (int indice = 1 ; indice <= lungime ; indice++)
{ optiuni[indice] = durata_transport / durata[indice] * capacitate[indice]; }
sort(optiuni + 1 , optiuni + lungime + 1 , greater <int>());
int indice = 0;
do { total -= optiuni[++indice]; }
while (total > 0);
cout << durata_transport << ' ' << indice;
cout.close(); cin.close();
return 0;
}