Cod sursa(job #2396642)

Utilizator Anakin1001George Giorgiu Gica Anakin1001 Data 3 aprilie 2019 18:12:01
Problema Garaj Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>
#include <algorithm>
#define mod 666013
#define inf 1000000001
using namespace std;
ifstream f("garaj.in");
ofstream g("garaj.out");
struct meme{
    int p;
    double r;
}v[100001];
int c[100001],t[100001],a[100001];
int nr,i,n,m;
long long st,dr,mid,tmin,s,maxi,lmin,l,x;
bool verif(int x){
    long long S=0;
    for(i=1;i<=n;i++){
        S+=c[v[i].p]*(x/t[v[i].p]);
        if(S>=m)
            return 1;
    }
    return 0;
}
int cmp(meme a,meme b){
    return a.r>b.r;
}
int main()
{   f>>n>>m;
    maxi=0;
    for(i=1;i<=n;i++){
        f>>c[i]>>t[i];
        t[i]*=2;
        if(maxi<(t[i])*(m/c[i]))
            maxi=(c[i])*(m/c[i]);
        v[i].r=(1.0*c[i])/t[i];
        v[i].p=i;
    }
    sort(v+1,v+n+1,cmp);
    st=1;dr=maxi;
    while(st<=dr){
        mid=(st+dr)/2;
        if(verif(mid)==1){
            dr=mid-1;
            tmin=mid;
        }
        else
            st=mid+1;
    }
    g<<tmin<<' ';
    for(i=1;i<=n;i++)
        a[i]=c[v[i].p]*(tmin/t[v[i].p]);
    s=0;nr=0;
    while(s<m)
        s+=a[++nr];
    g<<nr;
    return 0;
}