Pagini recente » Cod sursa (job #108023) | Cod sursa (job #3349695) | Cod sursa (job #3311001) | Cod sursa (job #2574611) | Cod sursa (job #3338072)
#include <fstream>
#include <algorithm>
#define ll long long
using namespace std;
ifstream fin("garaj.in");
ofstream fout("garaj.out");
ll n,m,c[100001],t[100001],s[100001],st,totals;
ll cb(ll timp){
ll total=0;
for(ll i=1;i<=n;i++){
ll nrj=timp/(2*t[i]);
ll stic=c[i]*nrj;
total+=stic;
}
return total;
}
int main()
{
fin>>n>>m;
for(ll i=1;i<=n;i++){
fin>>c[i]>>t[i];
totals+=t[i];
}
ll st=0,dr=1e15;
ll sol=dr;
while(st<=dr){
ll mid=st+(dr-st)/2;
if(cb(mid)>=m){
dr=mid-1,sol=mid;
}else st=mid+1;
}
int ind=0;
for(int i=1;i<=n;i++){
if(t[i]<=sol){
ll drumuri=(sol-t[i])/(2*t[i])+1;
s[ind++]=drumuri*c[i];
}
}
sort(s+1,s+ind+1,greater<ll>());
ll sum=0,nrmin=0;
for(int i=1;i<=ind;i++){
sum+=s[i];
nrmin++;
if(sum>=m)break;
}
fout<<sol<<" "<<nrmin;
return 0;
}