Pagini recente » Cod sursa (job #510693) | Cod sursa (job #686231) | Cod sursa (job #2224163) | Cod sursa (job #1811429) | Cod sursa (job #2236171)
#include <bits/stdc++.h>
#define NMAX 105
#define INF 0x3f3f3f3f
#define MOD 1000003
#define pb push_back
#define x first
#define y second
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int n,l,fa[NMAX],fb[NMAX];
struct copil {
int a,b,dif,ind;
} v[NMAX];
bool comp(copil A, copil B) {
return A.dif<B.dif;
}
bool possible(int val) {
int i,a=0,b=0;
for(i=1;i<=n;++i) {
if(l-a < val/v[i].a) {
fa[v[i].ind] = l-a;
a+=l-a;
}
else {
a+=val/v[i].a;
fa[v[i].ind] = val/v[i].a;
}
}
for(i=n;i>0;--i) {
if(l-b < (val-v[i].a*fa[v[i].ind])/v[i].b) {
fb[v[i].ind] = l-b;
b+=l-b;
}
else {
b+=(val-v[i].a*fa[v[i].ind])/v[i].b;
fb[v[i].ind] = (val-v[i].a*fa[v[i].ind])/v[i].b;
}
}
return a==l && b==l;
}
int main() {
int i,st,dr,mid;
fin>>n>>l;
for(i=1;i<=n;++i) {
fin >> v[i].a>>v[i].b;
v[i].dif = v[i].a-v[i].b;
v[i].ind = i;
}
sort(v+1,v+n+1,comp);
st=1;
dr=10000;
while(st<=dr) {
mid=(st+dr)/2;
if(possible(mid))
dr=mid-1;
else st=mid+1;
}
fout << st <<'\n';
for(i=1;i<=n;++i) fout << fa[i] << ' ' << fb[i] << '\n';
return 0;
}