Pagini recente » Cei mai harnici utilizatori info-arena | Cei mai harnici utilizatori info-arena | Cod sursa (job #545644) | Cod sursa (job #999496) | Cod sursa (job #1429810)
#include <stdio.h>
#define MAXN 30
int b[MAXN], point[MAXN];
long long a[MAXN];
inline int min2(int a, int b){
return a < b ? a : b;
}
inline void srt(int n){
int aux, i, j, min, p;
for(i = 0; i < n; i++){
p = i;
min = a[point[i]];
for(j = i + 1; j < n; j++){
if(min > a[point[j]]){
min = a[point[j]];
p = j;
}
}
aux = point[i]; point[i] = point[p]; point[p] = aux;
}
}
int main(){
FILE *in = fopen("shop.in", "r");
int n, c, i;
long long l;
fscanf(in, "%d%d%lld", &n, &c, &l);
for(i = 0; i < n; i++){
fscanf(in, "%lld%d", &a[i], &b[i]);
point[i] = i;
}
fclose(in);
srt(n);
int k = 0;
long long x = 1;
i = 0;
for(k = 0; i < n; k++){
while(i < n && a[point[i]] == k){
a[point[i]] = x;
i++;
}
x *= c;
}
int sum = 0;
for(i = n - 1; i >= 0; i--){
if(l > a[point[i]]){
b[point[i]] = min2(b[point[i]], (int)(l / a[point[i]]));
l -= a[point[i]] * b[point[i]];
sum += b[point[i]];
}
}
FILE *out = fopen("shop.out", "w");
fprintf(out, "%d\n", sum);
for(i = 0; i < n; i++)
fprintf(out, "%d ", b[i]);
fclose(out);
return 0;
}