Cod sursa(job #2221437)

Utilizator raulsomesanRaul Somesan raulsomesan Data 14 iulie 2018 12:45:38
Problema Lapte Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include<fstream>
#include<iostream>
#include<algorithm>
#define x first
#define y second
#define DN 105
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int n,l,nr1,nr2,t;
int b[DN];
pair<int,int>r[DN];
typedef pair<pair<int,int>,int  >pii;
pii a[DN];
int cmp(pii A,pii B)
{
    return (A.x.y/A.x.x>B.x.y/B.x.x||(A.x.y/A.x.x==B.x.y/B.x.x&&b[A.y]>b[B.y]));
}
int main()
{
    fin>>n>>l;
    for(int i=1;i<=n;i++)
    {
        fin>>a[i].x.x>>a[i].x.y;
        a[i].y=i;
    }
    for(int h=1;h<=100;h++)
    {
        nr1=nr2=0;
        for(int i=1;i<=n;i++)
        {
            r[a[i].y].y=h/a[i].x.y;
            b[a[i].y]=h%a[i].x.y;
            nr2+=r[a[i].y].y;
        }
        sort(a+1,a+n+1,cmp);
        if(nr2<l)
            continue;
        for(int i=1;i<=n;i++)
        {
            t=min(nr2-l,r[a[i].y].y);
            nr2-=t;
            r[a[i].y].y-=t;
            t=b[a[i].y]+t*a[i].x.y;
            r[a[i].y].x=t/a[i].x.x;
            nr1+=r[a[i].y].x;
            t=t%a[i].x.x;
            r[a[i].y].y+=t/a[i].x.y;
            nr2+=t/a[i].x.y;
        }
        if(nr1>=l)
        {
            fout<<h<<'\n';
            for(int i=1;i<=n;i++)
                fout<<r[i].x<<' '<<r[i].y<<'\n';
            return 0;
        }
    }
}