1228. Массив
Рассмотрим n - арный массив Х, объявленный как array[0..k1, 0..k2,
… , 0..kn]. Порядок P
элемента X[i1, i2, …, in] вычисляется по формуле P(i1, i2,
…, in) = 1 + d1 * i1 + d2
* i2 + … + dn * in. Числа d1,
d2, …, dn называются индексными
множителями.
Рассмотрим массив X[0..2, 0..1,
0..3] и его индексные множители d1
= 8, d2 = 4, d3 = 1. Порядок элемента X[1,
0, 3] равен P(1, 0, 3) = 1 + 8*1 + 4*0 + 1*3 = 13..
В задаче необходимо найти верхнюю
границу для каждой размерности (k1,
k2, …, kn) по заданным индексным
множителям и общим количеством элементов в массиве s.
Вход. Первая
строка содержит размерность массива n
(1 £ n £ 20) и общее число элементов s (1 £ s £ 231 – 1) в массиве. Следующие n строк содержат индексные множители d1, d2, …, dn.
Выход. Определить верхнюю границу для
каждой размерности в порядке k1,
k2, …, kn (0 < ki £ 1000). Выводимые размерности разделять пробелами или
символами CR/LF.
3 24
8
4
1
2 1 3
элементарные вычисления
Если величина текущего индексного
множителя равна di, а текущее число элементов равно s, то граница i - ой размерности может быть максимум s / di. Оставшиеся s % di элементов
следует располагать в следующих размерностях.
В массиве x храним входные индексные множители, в массиве k вычисляем верхнюю границу размерностей.
int x[20],k[20];
Читаем входные данные, заносим
индексные множители в массив x.
scanf("%d %d",&n,&s);
for(i=0;i<n;i++) scanf("%d",&x[i]);
Вычисляем верхние границы размерностей
и заносим их в массив k. Затем выводим их.
s--;
for(i=0;i<n;i++)
k[i] = s / x[i],s %=
x[i];
for(i=0;i<n;i++) printf("%d ",k[i]);
printf("\n");