Падает задача выдавая 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 и падению программы.
Разумеется, более общий вопрос: почему ваши переменные объявлены как глобальные??? Что за странная манера и откуда она пошла? Если бы они у вас были объявлены более разумным способом - локально - то и проблема с правильной инициализацией переменных скорее всего бы не возникла.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей