Cod sursa(job #1526472)

Utilizator raulmuresanRaul Muresan raulmuresan Data 16 noiembrie 2015 19:30:38
Problema Garaj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<fstream>
#include<iostream>
#include<vector>
#include <algorithm>
using namespace std;
ifstream fin("garaj.in");
ofstream fout("garaj.out");



int n,m,k,i,j,p,x,y,t,sol,b[100009];

struct camion
{
    int c,t;
};
camion a[100009];

int check(int time)
{
    int sol=0;
    for(i=1;i<=n;i++)
    {
        //nr+=(int)(c[i]*(T/t[i]));
        sol+=a[i].c*(time/a[i].t);
        if(sol>=m) return 1;
    }
    return 0;
}

int binary_search()
{
    int mij,st,dr;
    sol=0;
    st=1;
    dr=2000000000;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(check(mij) == 1)
        {
            sol=mij;
            dr=mij-1;
        }
        else st=mij+1;
    }
    return sol;
    //fout<<sol<<"\n";
}



int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        fin>>a[i].c>>a[i].t;
        a[i].t*=2;
    }
    t=binary_search();

    for(i=1;i<=n;i++)
    {
        b[i]=(t/a[i].t)*a[i].c;
    }
    sort(b+1,b+n+1);
    int cont=0;
    for(i=n;i>=1 && m>0;i--)
    {
        m=m-b[i];
        cont++;
    }

    for(i=1;i<=n;i++)
    {
       // fout<<b[i]<<"\n";
    }
    fout<<t<<" "<<cont<<"\n";

    for(i=1;i<=n;i++)
    {
       // fout<<a[i].c<<" "<<a[i].t<<"\n";
    }
}