Cod sursa(job #1668636)

Utilizator vladberaruvlad beraru alexandru vladberaru Data 29 martie 2016 22:24:41
Problema Shop Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("shop.in");
ofstream g("shop.out");
int n,k,c;
long long w[30];
long long S;
struct lista
{
    int v;
    long long b;
    int poz;
}a[30];
void poz(lista a[30],int li,int ls,int&k)
{
    int i=li,j=ls,c,i1=0,j1=-1;
    while(i<j)
    {
        if(a[i].v<a[j].v)
        {
            c=a[j].v; a[j].v=a[i].v;
            a[i].v=c; c=i1;
            c=a[j].b; a[j].b=a[i].b;
            a[i].b=c; c=i1;
            c=a[j].poz; a[j].poz=a[i].poz;
            a[i].poz=c; c=i1;
            i1=-j1; j1=-c;
        }
        i=i+i1;
        j=j+j1;
    }
    k=i;
}
void quick(int li,int ls)
{
    if(li<ls)
    {
        poz(a,li,ls,k);
        quick(li,k-1);
        quick(k+1,ls);
    }
}
int main()
{
    int i,s=0,nr,q;
    f>>n>>c>>S;
    for(i=1;i<=n;i++)
    {
        f>>a[i].v>>a[i].b;
        a[i].poz=i;
    }
    quick(1,n);
    for(i=1;i<=n;i++)
    {
        nr=pow(c,a[i].v);
        q=S/nr;
        if(q>a[i].b) {s=s+a[i].b;S=S-nr*a[i].b;w[a[i].poz]=a[i].b;}
        else {s=s+q;S=S-nr*q;w[a[i].poz]=q;}

    }
    g<<s<<'\n';
    for(i=1;i<=n;i++) g<<w[i]<<" ";
    return 0;
}