Cod sursa(job #1601006)

Utilizator andreey_047Andrei Maxim andreey_047 Data 15 februarie 2016 17:32:47
Problema Garaj Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <bits/stdc++.h>

using namespace std;

const int nmax = 100008;

int N,M,timp,cnt,s[nmax];

struct el{
 int t,nr;
}a[nmax];

inline bool cmp(const el &A, const el &B){
 return A.t < B.t;
}

inline bool Ok(int T){
 int i,j,c=0,p,h = T,k = M;

    for(i = 1; i <= N && k > 0; ++i){
        j = 2 * a[i].t;
        p = h / j;
        k=k-(a[i].nr)*p;
    }
  if(k<=0){
    for(i = 1; i <= N; ++i)
       s[i] = (T/(a[i].t*2))*a[i].nr;
    sort(s+1,s+N+1);
    i = N; h = M;
    while(h>0)h-=s[i],++c;
    cnt = c;

    return true;
  }
  return false;
}

inline void Calc(){
 int st,dr,mij;

  st = 1; dr = 1999999999;
  while(st <= dr){
    mij = (st + dr)/2;

    if(Ok(mij)){
        timp = mij;
        dr = mij-1;
    }
    else st = mij+1;

  }
}

int main(){
    int i;
    freopen ("garaj.in","r",stdin);
    freopen ("garaj.out","w",stdout);
    scanf("%d %d\n",&N,&M);
    for(i = 1; i <= N; ++i)
        scanf("%d %d\n",&a[i].nr,&a[i].t);

    sort(a+1,a+N+1,cmp);
    Calc();
    printf("%d %d\n",timp,cnt);

    return 0;
}