Cod sursa(job #139170)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 19 februarie 2008 19:45:58
Problema Garaj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
#include <algorithm>
#define inf 1000000000

using namespace std;

long n,m,i,c[100002],t[100002];
long low,mid,high;
long long cap,s,v[100002];

int main(){
    freopen("garaj.in","r",stdin);
    freopen("garaj.out","w",stdout);
    
    scanf("%ld %ld",&n,&m);
    for (i=1;i<=n;i++){
        scanf("%ld %ld",&c[i],&t[i]);
    }
    
    low=1;
    high=inf+1;
    while (low<high){
           mid = (low + high)/2;
           cap=0;
           for (i=1;i<=n;i++)
               cap=(long long)cap+(mid/(2*t[i]))*c[i];
           if (cap <(long long) m)
               low = mid + 1; 
           else
                high = mid; 
    }
    cap=0;
    for (i=1;i<=n;i++)
        cap=(long long)cap+(low/(2*t[i]))*c[i];
    
    if (low<=inf & cap ==(long long)m)
    printf ("%ld %ld\n",low,n);
    else{
         printf ("%ld ",low);
         
         for (i=1;i<=n;i++)
             v[i]=(long long)(low/(2*t[i]))*c[i];
         sort(v+1,v+n+1);
         s=0;
         for (i=1;i<=n;i++){
             s=(long long)s+v[i];
             if (s>cap-m)break;
         }
         printf("%ld\n",n-i+1);
    }

return 0;
}