Cod sursa(job #1033771)

Utilizator mariacMaria Constantin mariac Data 17 noiembrie 2013 15:19:29
Problema Lapte Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.95 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int N, L,t[101], cA[101], cB[101];

struct om
{
    int A, B;
};
vector<om> v;
vector<int> poz;

bool cmp(int a, int b)
{
    return v[a].A - v[b].A < v[a].B - v[b].B;
}
int main()
{
    int i;
    fin>> N>> L;

    for( i = 0; i < N; i++)
    {
        om nou;
        fin>> nou.A>>  nou.B;
        v.push_back(nou);
        poz.push_back(i);
    }
    sort(poz.begin(), poz.end(), cmp);
    int mini = 1, maxi = 100, posibil = -1;

    while( mini <= maxi)
    {
        int mij = ( mini + maxi)/2;
        int AL = L, BL = L;
        for( i = 0; i < N; i++)
        {
            int cp, cb, timp = 0;
            if( i > N-i-1) timp = t[i];
            cp = (mij - timp) / v[poz[i]].A;
            cb = cp < AL? cp: AL;
            AL -= cb;
            t[i] = cb * v[poz[i]].A;
            timp = 0;
            if( i >= N-i-1) timp = t[N - i - 1];
            cp = (mij - timp) / v[poz[N - i - 1]].B;
            cb = cp < BL? cp: BL;
            BL -= cb;
            t[N- i - 1] = cb * v[poz[N - i -1]].B;
        }
        if(!AL && !BL) {
            maxi = mij - 1;
            posibil = mij;
        }
            else mini = mij + 1;

    }
    fout<<posibil<<"\n";
    int AL = L, BL = L;
    for( i = 0; i < N; i++)
    {
        int cp, cb, timp = 0;
        if( i > N-i-1) timp = t[i];
        cp = (posibil - timp) / v[poz[i]].A;
        cb = cp < AL? cp: AL;
        AL -= cb;
        t[i] = cb * v[poz[i]].A;
        cA[poz[i]] = cb;
        timp = 0;
        if( i >= N-i-1) timp = t[N - i - 1];
        cp = (posibil - timp) / v[poz[N - i - 1]].B;
        cb = cp < BL? cp: BL;
        BL -= cb;
        t[N- i - 1] = cb * v[poz[N - i -1]].B;
        cB[poz[N-i-1]] = cb;
    }
    for( i = 0; i < N; i++)
        fout<<cA[i]<<" "<<cB[i]<<"\n";
    return 0;
}