Cod sursa(job #1028877)

Utilizator hevelebalazshevele balazs hevelebalazs Data 14 noiembrie 2013 19:46:50
Problema Lapte Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
#define fr(i,a,b) for(int i=a;i<b;++i)
#define rf(i,a,b) for(int i=b-1;i>=a;--i)
#define min(a,b) a<b?a:b
struct v{int a,b,i;
    bool operator <(const v &c){return c.a-c.b<a-b;}
    }a[100];
int c(const void*a,const void*b){return (*(v*)a)<(*(v*)b);}
int ci(const void*a,const void*b){return (*(v*)a).i-(*(v*)b).i;}
int main(){
    freopen("lapte.in","r",stdin);
    freopen("lapte.out","w",stdout);
    int n,m;
    scanf("%i%i",&n,&m);
    fr(i,0,n)scanf("%i%i",&a[i].a,&a[i].b),a[i].i=i;
    qsort(a,n,sizeof(v),c);
    int l=0,r=2*N*m,x,y,t[N],c;
    while(l<r){
        x=y=m,c=(l+r)/2;
        memset(t,0,sizeof(t));
        fr(i,0,n) x-=t[i]=min(x,c/a[i].a);
        rf(i,0,n) y-=min(y,(c-t[i]*a[i].a)/a[i].b);
        x||y?l=c+1:r=c;
        }
    printf("%i\n",l);
    rf(i,0,n)a[i].b=(l-t[i]*a[i].a)/a[i].b;
    fr(i,0,n)a[i].a=t[i];
    qsort(a,n,sizeof(v),ci);
    fr(i,0,n)printf("%i %i\n",a[i].a,a[i].b,a[i].i);
    return 0;
    }