Pagini recente » Cod sursa (job #1523580) | Cod sursa (job #2634890) | Cod sursa (job #830041) | Cod sursa (job #2265536) | Cod sursa (job #2070089)
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct m{
long long val;
int quantity;
int ord;
}monede[31];
int v[31],bun[31];
bool cmp(m a, m b){
if(a.val<b.val)
return 0;
return 1;
}
long long pow(int a, int b){
long long c=1;
while(b>0){
c*=a;
b--;
}
return c;
}
int n, flag;
void pay(long long s, int used){
if(flag==0){ /// nu am gasit inca nicio solutie
if(s==0){
flag=used;
for(int i=1;i<=n;i++)
bun[i]=v[i];
}
else
for(int i=1;i<=n && flag==0;i++)
if(monede[i].val<=s && monede[i].quantity>0){
monede[i].quantity--;
v[monede[i].ord]++;
pay(s-monede[i].val,used+1);
monede[i].quantity++;
v[monede[i].ord]--;
}
}
}
int main()
{
FILE *fin, *fout;
int c,i;
long long l,x;
fin=fopen("shop.in","r");
fout=fopen("shop.out","w");
fscanf(fin,"%d %d %lld\n",&n,&c,&l);
for(i=1;i<=n;i++){
fscanf(fin,"%lld %d\n",&x,&monede[i].quantity);
x=pow(c,x);
monede[i].val=x;
monede[i].ord=i;
}
sort(monede+1,monede+n+1,cmp);
pay(l,0);
fprintf(fout,"%d\n",flag);
for(i=1;i<=n;i++)
fprintf(fout,"%d ",bun[i]);
fclose(fin);
fclose(fout);
return 0;
}