Падает задача выдавая 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;
}
Ваша программа должна последовательно решать множество совершенно независимых задач (xx
штук). При этом при переходе от одной задачи к следующей вы не переинициализируете свои переменные. Например, где обнуление переменной cn
при переходе к следующей задаче? Переменная cn
никогда не обнуляется, что рано или поздно приводит к вылету за пределы массива z
и падению программы.
Разумеется, более общий вопрос: почему ваши переменные объявлены как глобальные??? Что за странная манера и откуда она пошла? Если бы они у вас были объявлены более разумным способом - локально - то и проблема с правильной инициализацией переменных скорее всего бы не возникла.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
pointsOfGrid заполняются нормально, не мусором, maxRadius - аналогичноОшибка возникает при попытке установить QCPCurveData ума не приложу что делать
Код нижеОн делит строку на маленькие подстрочки меньшего размера (чанки фиксированной величины, для примера 10), получается двумерный массив,...
Разрабатываю проект мониторинга веб сервиса на Java, но появилось куча вопросов, на которые я не нашёл ответа в сетиЯ могу копаться в JVM вытаскивая...