Top.Mail.Ru
Ответы

Помогите решить задачу на с++

Задача 4 «Чёрная пятница»
Как вам стало известно, один из магазинов Ставрополя готовит новую систему скидок с целью привлечения покупателей. Ваш знакомый по большому секрету рассказал в чем суть этих скидок. Сэкономить определенное количество денег вам могут помочь два типа скидок, которые будут действовать в магазине:1. При покупке трех товаров вы платите за них как за два самых дорогих из них.2. При покупке четырех товаров вы платите за них как за три самых дорогих из них.Таким образом, определенные товары можно объединить в тройки либо четверки и заплатить за них меньше. Требуется определить наименьшую возможную сумму денег, которая будет потрачена на приобретение всех подарков. Например, если цены пяти выбранных подарков составляют: 50, 80, 50, 100, 20, то можно отдельно купить четыре первых товара, получить за них скидку, и потом купить оставшийся подарок по его номинальной цене. В целом вся покупка будет стоить 250 денежных единиц, вместо 300.Напишите программу, которая по ценам всех подарков, находит минимальную сумму денег, достаточную для их покупки и позволит вам выгодно приобрести подарки.Входные данныеПервая строка содержит одно целое число N (0 ≤ N ≤ 10 000). Вторая строка содержит N натуральных чисел – цены подарков. Сумма цен всех подарков меньше чем 109. Объединять можно не только те товары, которые идут подряд во входных данных.Выходные данныеЕдинственная строка должна содержать одно целое число – найденную минимальную сумму денег, за которую можно купить все подарки.Пример Вход
5
50 80 50 100 20
Выход
250

По дате
По рейтингу
Аватар пользователя
Гений
2мес

По моему в определении 2-го типа скидок какая-то ошибка (ибо является по сути 1-й скидкой + 1 товар мимо скидок). Пока писали столь длинное условие задачи, потеряли смысл:)

Аватар пользователя
Высший разум
2мес

Держи. Надеюсь, мэйлру в этот раз блок кода вставит правильно, а не как обычно:

12345678910111213141516171819202122
 #include <iostream>
#include <algorithm>
#include <cstdint>

using namespace std;

constexpr uint MAXN = 100'000;
uint px[MAXN];

int main() {
    uint n, s = 0;
    cin >> n;
    for (uint i = 0; i < n; i++) {
        cin >> px[i];
        s += px[i];
    }
    sort(px, px + n, greater<>());
    for (uint i = 2; i < n; i += 3)
        s -= px[i];
    cout << s << endl;
    return 0;
}