Cod sursa(job #805705)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 31 octombrie 2012 22:13:33
Problema Shop Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#define putere first
#define numar second
#define x first
#define y second
#define p pair<pair <int,int> , pair<int,int> >
using namespace std;

p a[32];
int ap[32];

bool cmp(p a ,p b)
{
    return a.y>b.y;
}
int lgput(int nr,int put)
{
    if(put==0)
        return 1;
    if(put==1)
        return nr;
    if(put%2==0)
    {
        int rez=lgput(nr,put/2);
        return rez*rez;
    }
    else
        return nr*lgput(nr,put-1);
}

int main()
{
    int n,c,l;
    ifstream f("shop.in");
    ofstream g("shop.out");
    f>>n>>c>>l;
    for(int i=1;i<=n;i++)
    {
        f>>a[i].x.putere>>a[i].x.numar;
        a[i].y.y=i;
        a[i].y.x=lgput(c,a[i].x.putere);
    }
    sort(a+1,a+n+1,cmp);
    int S=0;

    int P=0;
    bool first=true;
    while(S!=l)
    {
        for(int i=1;i<=n;i++)
        {
            if(first==true)
            {
                int dist=l-S;
                int k=dist/a[i].y.x;
                k=min(k,a[i].x.numar);
                S+=k*a[i].y.x;
                P+=k;
                ap[a[i].y.y]=k;
            }
            else
            {
                 int k=--ap[a[i].y.y];
                 S+=k*a[i].y.x;
                 P+=k;
                 first=true;
            }
        }
        first=false;
        if(S!=l)
            S=0;
    }
    g<<P<<"\n";
    for(int i=1;i<=n;i++)
        g<<ap[i]<<" ";
    return 0;
}