Pagini recente » Cod sursa (job #576025) | Cod sursa (job #1596805) | Cod sursa (job #184129) | Cod sursa (job #1098419) | Cod sursa (job #393579)
Cod sursa(job #393579)
#include <stdio.h>
struct adat{int a,b,er;};
adat a[101],b[101];
int n,l;
void quicksort(int lo,int hi){
int h,i,j,x,y;
i=lo;
j=hi;
x=a[lo+(hi-lo)/2].b;
y=a[lo+(hi-lo)/2].a;
do{
while(a[i].b<x){i++;}
while(a[j].b>x){j--;}
if(i<=j){
h=a[i].b;
a[i].b=a[j].b;
a[j].b=h;
h=a[i].a;
a[i].a=a[j].a;
a[j].a=h;
i++;
j--;
}
}while(i<j);
if(lo<j){quicksort(lo,j);}
if(i<hi){quicksort(i,hi);}
}
int main(){
int i,lo,hi,mid,bl,al,temp,temp2;
freopen("lapte.in","r",stdin);
freopen("lapte.out","w",stdout);
scanf("%d %d",&n,&l);
for(i=1;i<=n;i++){
scanf("%d %d",&a[i].a,&a[i].b);
a[i].er=i;
}
lo=1;hi=100;
quicksort(1,n);
while(lo<=hi){
mid=lo+(hi-lo)/2;
bl=0;al=0;
for(i=1;i<=n;i++){
temp=0;temp2=0;
while((bl<l)&&(temp+a[i].b<=mid)){
temp+=a[i].b;
bl++;
}
b[a[i].er].b=temp/a[i].b;
while(temp+a[i].a<=mid){
temp+=a[i].a;
temp2+=a[i].a;
al++;
}
b[a[i].er].a=temp2/a[i].a;
}
if((al>=l)&&(bl>=l)){if(lo==hi){hi=mid-1;}else{hi=mid;}}
else{lo=mid+1;}
}
printf("%d\n",lo);
for(i=1;i<=n;i++){
printf("%d %d\n",b[i].a,b[i].b);
}
return 0;
}