Sai S4 Ответов: 1

Что мне делать и я уже попробовал максимум можете ли вы мне помочь


Minimize The Sum
Problem Description
Given an array of integers, perform atmost K operations so that the sum of elements of final array is minimum. An operation is defined as follows -

Consider any 1 element from the array, arr[i].

Replace arr[i] by floor(arr[i]/2).

Perform next operations on updated array.

The task is to minimize the sum after atmost K operations.

Constraints
1 <= N, K <= 10^5.

Input
First line contains two integers N and K representing size of array and maximum numbers of operations that can be performed on the array respectively.

Second line contains N space separated integers denoting the elements of the array, arr.

Output
Print a single integer denoting the minimum sum of the final array.

Time Limit
1

Examples
Example 1

Input

4 3

20 7 5 4

Output

17

Explanation

Operation 1 -> Select 20. Replace it by 10.

New array = [10, 7, 5, 4]

Operation 2 -> Select 10. Replace it by 5.

New array = [5, 7, 5, 4].

Operation 3 -> Select 7. Replace it by 3.

New array = [5,3,5,4].

Sum = 17.


Что я уже пробовал:

#include <stdio.h>

using namespace std;
int main()
{
    int n, number=2,A[100],i,k;
    
    cin>>n;
  cin>>k;
   
    for(i=0;i<n;i++)
        cin>>A[i];
    
    for(i=0;i<n;i++)
        A[0]=A[i]/number;
   
    for(i=0;i<n;i++)
        cout<<A[i]<<" ";
    return 0;
}

Sai S4

я не могу повторить это за k раз

Richard MacCutchan

Вы должны собраться вместе с heisnberg - профиль специалиста[^], который пытается решить аналогичные задачи.

OriginalGriff

Будь осторожен, когда произносишь его имя.

Richard MacCutchan

Сам не знаю почему. :)

OriginalGriff

Одна из лучших цитат из всей серии:
https://www.youtube.com/watch?v=10czUKzpbgg

OriginalGriff

А почему бы и нет?

Richard MacCutchan

Я действительно удивляюсь, почему люди тратят свое время на эти вопросы, поскольку они, похоже, не предназначены для того, чтобы научить вас многому о программировании. Однако ключ к решению этой проблемы заключается в том, чтобы найти наибольшее число в массиве на каждой итерации и уменьшить его вдвое. После того, как вы сделали K итераций, ответ должен быть суммой того, что осталось.

Rick York

Проблема состоит в том, что есть две строки ввода. Их можно было прочитать из файла. Вы должны подумать об этом. Это значительно облегчает тестирование.

1 Ответов

Рейтинг:
2

OriginalGriff

Прочтите инструкции еще раз и обратите внимание на раздел "объяснение", в котором приведены примеры данных и их обработка.

N и K различны: N говорит, насколько большим должен быть массив, K говорит, сколько раз вы меняете содержимое массива.
Итак этот код:

for(i=0;i<n;i++)
    A[0]=A[i]/number;
Это неверно во всех отношениях.

Ваш цикл должен выполняться K раз.
Внутри цикла вам нужно найти текущее наибольшее значение, а затем изменить его.
Для этого вам понадобится вложенный цикл, который находит текущий самый большой и предоставляет его индекс.
Как только вы это сделаете, используйте этот индекс, чтобы изменить значение.
Как только ваш внешний цикл будет завершен, вам понадобится еще один цикл, чтобы суммировать все значения.
Затем выведите эту сумму.