Cod sursa(job #717066)

Utilizator cernat.catallinFMI Cernat Catalin Stefan cernat.catallin Data 19 martie 2012 17:03:44
Problema Lapte Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.69 kb
#include <fstream>
#include <algorithm>
using namespace std;

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

struct Lapte
{
    int a,b,ab,repauz;
    int baut1,baut2;
}pers[101];

int n,i,j,L,ind[101],timp,bauta,bautb;

bool sortfunction(int i, int j) {return pers[i].ab>pers[j].ab;}

void citire()
{
    f>>n>>L;
    for(i=0;i<n;i++)
    {
        f>>pers[i].a>>pers[i].b;
        pers[i].ab=pers[i].a-pers[i].b;
        ind[i]=i;
    }
    f.close();
}
void rezolva()
{
    timp=bauta=bautb=0;
        while(bauta<L && bautb<L)
        {
            timp++;
            for(i=0;i<n/2;i++)
            {
                if(pers[ind[i]].repauz==0)
                {
                    pers[ind[i]].baut2++;
                    bautb++;
                    pers[ind[i]].repauz=pers[ind[i]].b;
                }
                if(pers[ind[n-i-1]].repauz==0)
                {
                    pers[ind[n-i-1]].baut1++;
                    bauta++;
                    pers[ind[n-i-1]].repauz=pers[ind[n-i-1]].a;
                }
                pers[ind[i]].repauz--;
                pers[ind[n-i-1]].repauz--;
            }
            if(pers[ind[n/2]].ab>0)
            {
                if(pers[ind[n/2]].repauz==0) pers[ind[n/2]].baut2++,bautb++,pers[ind[n/2]].repauz=pers[ind[n/2]].b;
                pers[ind[n/2]].repauz--;
            }
            else
            {
                if(pers[ind[n/2]].repauz==0) pers[ind[n/2]].baut1++,bauta++,pers[ind[n/2]].repauz=pers[ind[n/2]].a;
                pers[ind[n/2]].repauz--;
            }
        }
        if(bauta<L)
        {
            while(bauta<L)
            {
                timp++;
                for(i=0;i<n;i++)
                {
                    if(pers[i].repauz==0)
                    {
                        pers[i].baut1++;
                        bauta++;
                        pers[i].repauz=pers[i].a;
                    }
                    pers[i].repauz--;
                }
            }
        }
        else if (bautb<L)
        {
            while(bautb<L)
            {
                timp++;
                for(i=0;i<n;i++)
                {
                    if(pers[i].repauz==0)
                    {
                        pers[i].baut2++;
                        bautb++;
                        pers[i].repauz=pers[i].b;
                    }
                    pers[i].repauz--;
                }
            }
        }
}
int main()
{
    citire();
    sort(ind,ind+n,sortfunction);
    rezolva();
    g<<timp<<"\n";
    for(i=0;i<n;i++)
    g<<pers[i].baut1<<" "<<pers[i].baut2<<"\n";
    g.close();
    return 0;
}