Pagini recente » Cod sursa (job #3279824) | Cod sursa (job #268739) | Cod sursa (job #2390829) | Cod sursa (job #2921197) | Cod sursa (job #1054430)
#include<cstdio>
#include<algorithm>
using namespace std;
const int LIM = 101;
struct copil{
int a,b,pos;
}cp[LIM];
int n,l;
bool comp(copil a, copil b){
return a.b<b.b;
}
int bt[LIM][2];
bool canDrink(int t){
int litria=0, litrib=0;
for(int i=1; i<=n; i++){
litria += t/cp[i].a;
bt[cp[i].pos][0]=t/cp[i].a; bt[cp[i].pos][1]=0;
}
for(int i=1; i<=n; i++){
if(litrib + t/cp[i].b <= l){
litrib += t/cp[i].b;
bt[cp[i].pos][1] += t/cp[i].b;
litria -= t/cp[i].a;
bt[cp[i].pos][0] -= t/cp[i].a;
}else{
bt[cp[i].pos][1]+=l-litrib;
bt[cp[i].pos][0]=(t-((l-litrib)*cp[i].b))/cp[i].a;
litria -= t/cp[i].a - bt[cp[i].pos][0];
litrib += bt[cp[i].pos][1];
}
}
if(litria>=l && litrib >= l)
return true;
return false;
}
int main(){
FILE *in=fopen("lapte.in","r"), *out=fopen("lapte.out","w");
fscanf(in, "%d%d", &n, &l);
for(int i=1; i<=n; i++){
fscanf(in, "%d%d", &cp[i].a, &cp[i].b);
cp[i].pos=i;
}
sort(cp+1, cp+n+1, comp);
int l1=1, l2=100, l3, b=100;
while(l1<l2){
l3=l1+(l2-l1)/2;
if(canDrink(l3)){
b=l3;
l2=l3-1;
}else{
l1=l3+1;
}
}
canDrink(b);
fprintf(out, "%d\n", b);
for(int i=1; i<=n; i++){
fprintf(out, "%d %d\n", bt[i][0], bt[i][1]);
}
return 0;
}