Cod sursa(job #393569)

Utilizator SzabiVajda Szabolcs Szabi Data 9 februarie 2010 18:02:04
Problema Lapte Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#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)||((a[i].b==x)&&(a[i].a>y))){i++;}
	while((a[j].b>x)||((a[j].b==x)&&(a[i].a<y))){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;
}