Pagini recente » Cod sursa (job #2328611) | Cod sursa (job #2808655) | Cod sursa (job #2269013) | Cod sursa (job #2536671) | Cod sursa (job #2929019)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int n,l;
struct om {
int a,b,i;
friend bool operator<(om x,om y) { return x.a*y.b>x.b*y.a; } //x.a/x.b < y.a/y.b
}v[105];
vector<pair<int,int>> ansv;
vector<pair<int,int>> ansvr;
void put_answer(om x,int la,int lb) {
ansv[x.i].first=la;
ansv[x.i].second=lb;
}
bool testt(int tmin) {
int lapteA=l,lapteB=l;
for(int i=1;i<=n;i++) {
int lb = min(lapteB,tmin/v[i].b);
int la = (tmin - lb * v[i].b)/v[i].a;
put_answer(v[i],la,lb);
lapteA-=la;
lapteB-=lb;
}
return lapteA <= 0 && lapteB <= 0;
}
int caut() {
int st=1,dr=100,mij,r=-1;
while(st<=dr) {
mij = (st+dr)/2;
bool ok = testt(mij);
if(ok) {
dr=mij-1;
r=mij;
ansvr = ansv;
}
else st=mij+1;
}
return r;
}
int main() {
fin>>n>>l;
ansv.resize(n+1);
for(int i=1;i<=n;i++) {
fin>>v[i].a>>v[i].b;
v[i].i=i;
}
sort(v+1,v+n+1);
int rasp = caut();
fout<<rasp<<'\n';
for(int i=1;i<=n;i++){
fout<<ansvr[i].first<<' '<<ansvr[i].second<<'\n';
}
return 0;
}