Задача с покупкой продуктов

171
17 февраля 2019, 00:20

Падает задача выдавая Runtime error. При этом на тестовом примере работает правильно. Подскажите где может быть ошибка в коде.

Жена отправила мужа в торговый центр покупать продукты. Муж должен купить там ровно K продуктов. В этом торговом центре есть N магазинов. В каждом магазине есть ровно 3 продукта. Но из каждого магазина муж может купить максимум 2 продукта. Задача мужа купить жене K продуктов за минимальную цену.

Вводные данные: Первая строка содержит целое число T количество тестов. Первая строка каждого тестового примера содержит два числа N и K, разделенные пробелом (1 ≤ N ≤ 1000),(1 ≤ K ≤ 2N). Далее следуют N строк. Каждая строка содержит 3 числа разделенных пробелами обозначающие цену продуктов в магазине. (1 ≤ P ≤ 10^6)

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

Примеры Ввода/Вывода:

+------------------+-------------------+
| стандартный ввод | стандартный вывод |
+------------------+-------------------+
| 1                | 7                 |
| 3 4              |                   |
| 1 10 300         |                   |
| 4 5 6            |                   |
| 1 100 1          |                   |
+------------------+-------------------+

В своем коде я сначала записываю в массив цены продуктов, потом сортирую их от меньшего к большему и записываю в финальный массив z только 2 наименьших. А дальше просто сортирую уже весь массив z и плюсую нужное K количество продуктов к сумме (sum). Как понимаю runtime error выдает при работе с большими цислами, но не могу понять почему ведь в теории должен работать.

Мой код:

#include <iostream>
using namespace std;
long long int xx, n, k, t[9000], z[9000], tem, sum=0, cn=0;
int main()
{
    cin >> xx;
    for(int i=0;i<xx;i++)
    {
        cin >> n >> k;
        for(int q=0;q<n;q++)
        {
            for(int y=0;y<3;y++)
            {
                cin >> t[y];
            }
            for(int j=0;j<3;j++)
            {
                for(int r=0;r<2;r++)
                {
                    if(t[r]>t[r+1])
                    {
                        tem = t[r+1];
                        t[r+1] = t[r];
                        t[r] = tem;
                    }
                }
            }
            z[cn] = t[0];
            cn++;
            z[cn] = t[1];
            cn++;
        }
        for(int j=0;j<2*n;j++)
        {
            for(int r=0;r<(2*n)-1;r++)
            {
                if(z[r]>z[r+1])
                {
                    tem = z[r+1];
                    z[r+1] = z[r];
                    z[r] = tem;
                }
            }
        }
        for(int y=0;y<k;y++)
        {
            sum+=z[y];
        }
        cout << sum << endl;
        sum = 0;
    }
    return 0;
}
Answer 1

Ваша программа должна последовательно решать множество совершенно независимых задач (xx штук). При этом при переходе от одной задачи к следующей вы не переинициализируете свои переменные. Например, где обнуление переменной cn при переходе к следующей задаче? Переменная cn никогда не обнуляется, что рано или поздно приводит к вылету за пределы массива z и падению программы.

Разумеется, более общий вопрос: почему ваши переменные объявлены как глобальные??? Что за странная манера и откуда она пошла? Если бы они у вас были объявлены более разумным способом - локально - то и проблема с правильной инициализацией переменных скорее всего бы не возникла.

READ ALSO
Ошибка Index out of range в QVector

Ошибка Index out of range в QVector

pointsOfGrid заполняются нормально, не мусором, maxRadius - аналогичноОшибка возникает при попытке установить QCPCurveData ума не приложу что делать

232
копирование двумерного массива

копирование двумерного массива

Код нижеОн делит строку на маленькие подстрочки меньшего размера (чанки фиксированной величины, для примера 10), получается двумерный массив,...

299
Мониторинг web-services Java

Мониторинг web-services Java

Разрабатываю проект мониторинга веб сервиса на Java, но появилось куча вопросов, на которые я не нашёл ответа в сетиЯ могу копаться в JVM вытаскивая...

209