Pagini recente » Cod sursa (job #3173391) | Cod sursa (job #3190766) | Cod sursa (job #21192) | Cod sursa (job #41698) | Cod sursa (job #2035052)
#include <bits/stdc++.h>
struct elem{
long long first, second;
long long pos;
bool operator <(const elem &aux) const{
return first < aux.first;
}
};
std::priority_queue <elem> pq;
long long pw[40];
long long f[40];
inline long long minim(long long a, long long b){
return a < b ? a : b;
}
int main(){
FILE*fi,*fo;
fi = fopen("shop.in","r");
fo = fopen("shop.out","w");
long long n;
long long c, l;
fscanf(fi,"%lld%lld%lld", &n, &c, &l);
for(int i = 1; i <= n; i++){
long long a, b;
fscanf(fi,"%lld%lld", &a, &b);
pq.push({a, b, i});
}
pw[0] = 1;
int ind = 1;
while(pw[ind - 1] * c <= l){
pw[ind] = pw[ind - 1] * c;
ind++;
}
long long cnt = 0;
while(l > 0){
while(pw[pq.top().first] > l) pq.pop();
long long nr = l / pw[pq.top().first];
l = l - minim(nr, pq.top().second) * pw[pq.top().first];
f[pq.top().pos] += minim(nr, pq.top().second);
cnt += minim(nr, pq.top().second);
pq.pop();
}
fprintf(fo,"%lld\n", cnt);
for(int i = 1; i <= n; i++)
fprintf(fo,"%lld ", f[i]);
fclose(fi);
fclose(fo);
return 0;
}