Cod sursa(job #2198728)

Utilizator MateiBarbaBarba Matei MateiBarba Data 25 aprilie 2018 11:03:19
Problema Lapte Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

ifstream f("lapte.in");
ofstream g("lapte.out");

struct triplet
{
    int x,y,i;
    float r;
}v[100];

int n,l,a[100],b[100],i,j,t,ta,tb,t1,t2;

int comp(triplet a, triplet b){
    if(a.r <= b.r) return 1;
    return 0;
}

int sim(){
    for(i = 0 ; i < n ; i++){
        ta = tb = 0;
        for(j = 0 ; j < i ; j++){
            a[v[j].i] = t/v[j].x;
            ta += a[v[j].i];
            b[v[j].i] = t%v[j].x/v[j].y;
            tb += b[v[j].i];
        }
        for(j = i+1 ; j < n ; j++){
            b[v[j].i] = t/v[j].y;
            tb += b[v[j].i];
            a[v[j].i] = t%v[j].y/v[j].x;
            ta += a[v[j].i];
        }
        if((l-ta)*(l>ta)*v[i].x + (l-tb)*(l>tb)*v[i].y < t){
            a[v[i].i] = (l-ta)*(l>ta);
            b[v[i].i] = (l-tb)*(l>tb);
            return 1;
        }
    }
    return 0;
}

void output()
{
    g<<t<<"\n";
    for(j=0;j<n;j++)
    g<<a[j]<<' '<<b[j]<<"\n";
}

int main()
{
    f >> n >> l;
    for(i = 0 ; i < n ; i++){
        f >> v[i].x >> v[i].y;
        v[i].i = i;
        v[i].r = v[i].x/v[i].y;
    }
    sort(v,v+n,comp);
    t1 = 1;
    t2 = 10000;

    while(t1 != t2){
        t = t1+t2;
        t /= 2;
        if(sim())
            t2 = t;
        else
            t1 = t+1;
    }
    t = t1;
    sim();
    g<<t<<"\n";
    for(j=0;j<n;j++)
    g<<a[j]<<' '<<b[j]<<"\n";
    return 0;
}