Cod sursa(job #393632)

Utilizator SzabiVajda Szabolcs Szabi Data 9 februarie 2010 19:06:53
Problema Lapte Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 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){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;
		h=a[i].er;
		a[i].er=a[j].er;
		a[j].er=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;
}