Cod sursa(job #1005906)

Utilizator poptibiPop Tiberiu poptibi Data 5 octombrie 2013 23:49:59
Problema Garaj Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;

const int NMAX = 100010;

int N, M, C, T;
pair<int, int> V[NMAX];

int Check(int MaxTime)
{
    int Total = 0;
    for(int i = 1; i <= N; ++ i)
    {
        Total += V[i].second * (MaxTime / V[i].first);
        if(Total >= M)
            return i;
    }
    return -1;
}

void Search()
{
    int Left = 0, Right = 100000000, Mid, Ans, Time;
    while(Left <= Right)
    {
        Mid = (Left + Right) / 2;
        int Now = Check(Mid);
        if(Now != -1) Ans = Mid, Time = Now, Right = Mid - 1;
        else Left = Mid + 1;
    }

    printf("%i %i\n", Ans, Time);
}

int main()
{
    freopen("garaj.in", "r", stdin);
    freopen("garaj.out", "w", stdout);

    scanf("%i %i", &N, &M);
    for(int i = 1; i <= N; ++ i)
    {
        scanf("%i %i", &C, &T);
        V[i] = make_pair(2 * T, C);
    }

    sort(V + 1, V + N + 1);

    Search();

    return 0;
}