Cod sursa(job #2112773)

Utilizator Mihai145Oprea Mihai Adrian Mihai145 Data 23 ianuarie 2018 20:35:56
Problema Garaj Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("garaj.in");
ofstream fout("garaj.out");
int n, m, solt, solc;
struct jimy
{
    int c, t;
}v[100002];
inline bool cmp(const jimy a, const jimy b)
{
    if(a.t==b.t)
        return a.c>b.c;
    return a.t<b.t;
}
int verif(int val)
{
    int i, log, ct=0;
    unsigned long long sum=0;
    for(i=1; i<=n; i++)
    {
        log=(val)/(2*v[i].t);
        sum+=(unsigned long long)log*v[i].c;
        if(log) ct++;
        if(sum>=(unsigned long long)m) return ct;
    }
    return 0;
}
void bs()
{
    int x, st=0, dr=INT_MAX, mijl;
    while(st<=dr)
    {
        mijl=st+(dr-st)/2;
        x=verif(mijl);
        if(x) solt=mijl, solc=x, dr=mijl-1;
        else st=mijl+1;
    }
}
int main()
{
    int i;
    fin>>n>>m;
    for(i=1; i<=n; i++) fin>>v[i].c>>v[i].t;
    sort(v+1,v+n+1,cmp);
    bs();
    fout<<solt<<' '<<solc<<'\n';
    return 0;
}