Cod sursa(job #2246140)

Utilizator marinaoprOprea Marina marinaopr Data 26 septembrie 2018 18:35:08
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <stdio.h>
#include <algorithm>

#define NMAX 35

using namespace std;

FILE *fin=fopen("shop.in","r"); FILE *fout=fopen("shop.out","w");

struct moneda {long long int Val;long long int Poz;long long int Nr;} M[NMAX];

long long int N,i,Sum,Baza,X,Total,Answer[NMAX];

bool comparare(moneda X,moneda Y)
{
    if(X.Val<Y.Val) return 1;
    return 0;
}

long long int putere(long long int A,long long int B)
{
    long long int Rez=1;
    for(int i=1; i<=B; ++i) Rez*=A;
    return Rez;
}

int main()
{
    fscanf(fin,"%lld%lld%lld",&N,&Baza,&Sum);
    for(i=1; i<=N; ++i)
    {
        fscanf(fin,"%lld%lld",&X,&M[i].Nr);
        M[i].Val=putere(Baza,X);
        M[i].Poz=i;
    }
    sort(M+1,M+N+1,comparare);
    for(i=N; i>=1 and Sum>0; --i)
    {
        X=Sum/M[i].Val;
        if(X>=M[i].Nr)
        {
            Answer[M[i].Poz]=M[i].Nr; Total+=M[i].Nr;
            Sum-=M[i].Val*M[i].Nr;
        }
        else
        {
            Answer[M[i].Poz]=X; Total+=X;
            Sum-=M[i].Val*X;
        }
    }
    fprintf(fout,"%lld\n",Total);
    for(i=1; i<=N; ++i) fprintf(fout,"%lld ",Answer[i]);

    return 0;
}