Есть задача, я её написал, но она не проходит, уверен, что правильно написал. Помогите пожалуйста!
Вот задача
Условие:
Ксения и Яна отмечают день Святого Валентина. Для подготовки к празднику они составили список из N задач, которые им предстоит сделать. Для выполнения i-той задачи Ксении потребуется Xi секунд, а Яне потребуется Yi секунд.
Для того, чтобы минимизировать время подготовки к празднику, они решили выполнять задачи поочередно. То есть, если Ксения выполняет первую задачу, то после этого Яна выполняет вторую, затем Ксения выполняет третью и так далее.
Порядок изменится, если Яна будет выполнять первую задачу.
Помогите Ксении и Яне найти минимальное возможное время, необходимое для выполнения всех N задач поочередно.
Формат ввода:
Первая строка содержит единственное целое число T – количество тестовых случаев. Далее следует описание тестов в следующем формате:
Первая строка каждого теста содержит единственное целое число N – количество задач.
Вторая строка каждого теста содержит N разделенных пробелами целых чисел, где i-тое число обозначает количество секунд, необходимое Ксении для выполнения i-той задачи.
Третья строка каждого теста содержит N разделенных пробелами целых чисел, где i-тое число обозначает количество секунд, необходимое Яне для выполнения i-той задачи.
Формат вывода:
Для каждого тестового случая выведите в отдельную строку единственное целое число – минимальное возможное время, необходимое для выполнения всех N задач.
Подзадачи:
Подзадача 1: 40 баллов
Подзадача 2: 60 баллов
Примеры тестов:
Входные данные:
1
3
2 1 2
3 2 1
Выходные данные: 5
Мой код :
long long t, n, cis, sn = 0, sc = 0;
vector<long long>kseniya;
vector<long long>yana;
cin >> t;
for (long long i = 1; i <= t; i++)
{
sn = 0;
sc = 0;
cin >> n;
for (long long ii = 1; ii <= n; ii++)
{
cin >> cis;
kseniya.push_back(cis);
}
for (long long ii = 1; ii <= n; ii++)
{
cin >> cis;
yana.push_back(cis);
}
for (long long ii = 0; ii < n; ii++)
{
if ((i + 1) % 2 != 0)sn += kseniya[ii];
else sn += yana[ii];
}
for (long long ii = 0; ii < n; ii++)
{
if ((i + 1) % 2 != 0)sc += yana[ii];
else sc += kseniya[ii];
}
cout << min(sn, sc) << endl;
kseniya.clear();
yana.clear();
}
Поскольку ошибка уже указана, я только добавлю: для указанных входных данных 32-битного ungigned long вполне хватает. Кроме того, нет смысла хранить введенные данные. Я бы действовал так:
#include <iostream>
unsigned long subproblem()
{
unsigned long N, tm, t[2] = {0, 0};
std::cin >> N;
for(unsigned long i = 0; i < N; ++i)
{
std::cin >> tm; t[i%2] += tm;
}
for(unsigned long i = 0; i < N; ++i)
{
std::cin >> tm; t[1-i%2] += tm;
}
return (t[0] < t[1]) ? t[0] : t[1];
}
int main()
{
int count;
std::cin >> count;
for(int i = 0; i < count; ++i)
std::cout << subproblem() << std::endl;
}
Всем спасибо за помощь ! Я нашёл ошибку
if ((i + 1) % 2 != 0)sn += kseniya[ii];
else sn += yana[ii];
}
здесь нужно ii написать ! Слепой как кот))
Я бы создал функцию int calcolate и в параметрах указать кто делает задачу и собственно время и число операций , и пустить рекурсию. Главное не забыть закинуть в функцию чтобы каждый стек функции менял того кто делает эту задачу. Алгоритм понятен? Реализация уже на ваших плечах
у тебя стоят одинаковые условия на суммирование
"if((i+1)%2!=0)"
Сборка персонального компьютера от Artline: умный выбор для современных пользователей