Cod sursa(job #1749942)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 29 august 2016 12:21:32
Problema Shop Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <stdio.h>
#include <algorithm>
using namespace std;
struct elem{int exp,ind,cate,nr;};
elem v[45];
bool cmp(elem a,elem b){
    if(a.exp>b.exp)
        return true;
    else
        return false;
}
bool ord(elem a,elem b){
    if(a.ind<b.ind)
        return true;
    else
        return false;
}
long long put(long long baza,long long exp){
    long long rasp=1;
    while(exp>0){
        if(exp%2==1){
            rasp=rasp*baza;
            exp--;
        }
        else{
            baza*=baza;
            exp/=2;
        }
    }
    return rasp;
}
int main(){
    FILE *fin,*fout;
    fin=fopen("shop.in","r");
    fout=fopen("shop.out","w");
    long long i,n,baza,exp,plata,val,rasp=0;
    fscanf(fin,"%lld%lld%d",&n,&baza,&plata);
    for(i=1;i<=n;i++){
        fscanf(fin,"%d%d",&v[i].exp,&v[i].cate);
        v[i].ind=i;
    }
    sort(v+1,v+n+1,cmp);
    for(i=1;i<=n;i++){
        val=put(baza,v[i].exp);
        if(v[i].cate<plata/val)
            v[i].nr=v[i].cate;
        else
            v[i].nr=plata/val;
        plata=plata-v[i].nr*val;
        rasp=rasp+(long long)v[i].nr;
    }
    sort(v+1,v+n+1,ord);
    fprintf(fout,"%lld\n",rasp);
    for(i=1;i<=n;i++)
        fprintf(fout,"%d ",v[i].nr);
    fclose(fin);
    fclose(fout);
    return 0;
}