Cod sursa(job #1099893)

Utilizator oprea1si2si3Oprea Sebastian oprea1si2si3 Data 6 februarie 2014 13:33:01
Problema Garaj Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<fstream>
#include<iostream>
#include<algorithm>
using namespace std;

int N,M,c[100010],t[100010],poz,contor;
long long sol[100010];
void citire() {

    ifstream in ("garaj.in");
    int i;
    in>>N>>M;
    for(i=1;i<=N;i++){
        in>>c[i]>>t[i];
        t[i]*=2;
    }
    in.close();

}

int valid(int timp) {

    int i;
    long long s=0;
    for(i=1;i<=N;i++){
        s+=1LL*((timp/t[i])*c[i]);
        if(s>=M)
            return 1;
    }
    return 0;

}

int cautarebin() {

    int st,dr,m,ok;
    st=0;
    dr=1000000000;
    while(st<=dr) {
        m=(st+dr)/2;
        ok=valid(m);
        if(ok==1)
          dr=m-1;
        else
          st=m+1;
    }
    return m+1;
}

void solve() {

    int i;
    long long s=0;
    poz=cautarebin();
    for(i=1;i<=N;i++) {
        sol[i]=1LL*(poz/t[i])*c[i];
    }
    sort(sol+1,sol+N+1);

    for(i=N;i>=1;i--) {
        if(s<M){
        s+=sol[i];
        contor++;
        }
    }

}

void afisare(){

    ofstream out("garaj.out");
    out<<poz<<' '<<contor<<'\n';
    out.close();

}

int main () {

    citire();
    solve();
    afisare();
    return 0;

}