Cod sursa(job #2170934)

Utilizator RazvanChirilaRazvan RazvanChirila Data 15 martie 2018 10:28:06
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("shop.in");
ofstream g("shop.out");
unsigned long long L;

int n,c,monezif,mu[32];

struct moneda{int a,poz; long long valoare;}monezi[100000001]; //tinem minte valoarea, numarul aparitiilor si pozitia fiecarei monede

int cmp(moneda a, moneda b) //criteriul de sortare
{
    return (a.valoare>b.valoare);
}

int cmp1(long long a, long long b)
{
    return(a>b);
}

int main()
{
    int i,val,m;
    f>>n>>c>>L;
    long long v[60]={0};
    v[1]=1;
    //construim vectorul valoare
    i=2;
    while(c*v[i-1]<L)
    {
       v[i]=c*v[i-1]; i++;
    }
    m=i;
    if(v[m]==0)m--;

    //citire
    for(i=1;i<=n;i++)
    {
        f>>val>>monezi[i].a;
        monezi[i].poz=i;
        monezi[i].valoare=v[val+1];
    }

    sort(monezi+1,monezi+n+1,cmp);

    for(i=1;i<=n && L>0;i++)
    {
       long long valoare=monezi[i].valoare;
       long long cat=L/valoare;
       long long amin=min(cat,1LL*monezi[i].a);
       if(amin>0)
        {
            monezif+=amin;
            mu[monezi[i].poz]=amin;
            L=L-amin*valoare;
        }
    }

    g<<monezif<<'\n';
    for(i=1;i<=n;i++)
        g<<mu[i]<<' ';
    f.close();
    g.close();
    return 0;
}