Pagini recente » Cod sursa (job #451523) | Cod sursa (job #569450) | Cod sursa (job #1867711) | Cod sursa (job #739188) | Cod sursa (job #333993)
Cod sursa(job #333993)
#include<stdio.h>
int n,L,sa,sb,a[101][2],b[101][2],sol[101],poz[101];
void init_b(int t){
int i;
sa=sb=0;
for(i=1;i<=n;i++){
b[i][1]=t/a[i][1];
b[i][0]=(t-b[i][1]*a[i][1])/a[i][0];
sa+=b[i][0];
sb+=b[i][1];
}
}
void actualizeaza_sol(){
int i;
for(i=1;i<=n;i++)
sol[i]=b[i][0];
}
int dinamic(int t){
int i;
init_b(t);
if(sb<L)
return 0;
i=n;
while(sb>=L){
if(sa>=L){
actualizeaza_sol();
return 1;
}
if(!b[i][1])
i--;
b[i][1]--;
sb--;
sa-=b[i][0];
b[i][0]=(t-b[i][1]*a[i][1])/a[i][0];
sa+=b[i][0];
}
return 0;
}
int bsearch(int li,int ls){
int x;
if(li>ls)
return li;
x=dinamic((li+ls)/2);
if(x)
return bsearch(li,(li+ls)/2-1);
else
return bsearch((li+ls)/2+1,ls);
}
void init_poz(){
int i;
for(i=1;i<=n;i++)
poz[i]=i;
}
void swap(int i, int j){
int aux;
aux=a[i][1];
a[i][1]=a[j][1];
a[j][1]=aux;
aux=a[i][0];
a[i][0]=a[j][0];
a[j][0]=aux;
poz[i]=j;
poz[j]=i;
}
void sort(){
int i,j;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(a[i][1]>a[j][1]|| (a[i][1]==a[j][1] && a[i][0]<a[j][0]))
swap(i,j);
}
void read(){
int i;
scanf("%d%d",&n,&L);
for(i=1;i<=n;i++)
scanf("%d%d",&a[i][0],&a[i][1]);
}
void swap_poz(int i, int j){
int aux;
aux=sol[i];
sol[i]=sol[j];
sol[j]=aux;
swap(i,j);
}
void sort_poz(){
int i,j;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(poz[i]>poz[j])
swap_poz(i,j);
}
int main(){
freopen("lapte.in","r",stdin);
freopen("lapte.out","w",stdout);
read();
init_poz();
sort();
int i,x;
printf("%d\n",x=bsearch(1,100));
sort_poz();
for(i=1;i<=n;i++)
printf("%d %d\n",sol[i],(x-sol[i]*a[i][0])/a[i][1]);
return 0;
}