Pagini recente » Cod sursa (job #3347611) | Cod sursa (job #3307566) | Cod sursa (job #3312827) | Cod sursa (job #3325838) | Cod sursa (job #3338370)
#include <fstream>
#include <algorithm>
#include <climits>
#define ll long long
using namespace std;
ifstream fin("garaj.in");
ofstream fout("garaj.out");
ll n,m,camioane[100001],timp[100001],cap[100001],nrMin,nrC,sum;
bool check(ll T){
ll total=0;
for(int i=1;i<=n;i++){
ll transport = T/(2*(timp[i]));
total+=transport*camioane[i];
if(total>=m)return true;
}
return false;
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++){
fin>>camioane[i]>>timp[i];
}
ll st = 1,dr= 1e15;
while (st<dr){
ll T = (st + dr) / 2;
if (check(T)) {
dr = T;
} else {
st = T+1;
}
}
nrMin=st;
for(int i=1;i<=n;i++){
cap[i]=camioane[i]*(nrMin/(2*(timp[i])));
}
sort(cap+1,cap+n+1,greater<ll>());
for(int i=1;i<=n;i++){
if(sum>=m)break;
sum+=cap[i];
nrC++;
}
fout<<nrMin<<" "<<nrC;
return 0;
}