Решение задачи не проходит

267
21 марта 2017, 14:10

Есть задача, я её написал, но она не проходит, уверен, что правильно написал. Помогите пожалуйста!

Вот задача

Условие:

Ксения и Яна отмечают день Святого Валентина. Для подготовки к празднику они составили список из N задач, которые им предстоит сделать. Для выполнения i-той задачи Ксении потребуется Xi секунд, а Яне потребуется Yi секунд.

Для того, чтобы минимизировать время подготовки к празднику, они решили выполнять задачи поочередно. То есть, если Ксения выполняет первую задачу, то после этого Яна выполняет вторую, затем Ксения выполняет третью и так далее.

Порядок изменится, если Яна будет выполнять первую задачу.

Помогите Ксении и Яне найти минимальное возможное время, необходимое для выполнения всех N задач поочередно.

Формат ввода:

Первая строка содержит единственное целое число T – количество тестовых случаев. Далее следует описание тестов в следующем формате:

Первая строка каждого теста содержит единственное целое число N – количество задач.
Вторая строка каждого теста содержит N разделенных пробелами целых чисел, где i-тое число обозначает количество секунд, необходимое Ксении для выполнения i-той задачи.
Третья строка каждого теста содержит N разделенных пробелами целых чисел, где i-тое число обозначает количество секунд, необходимое Яне для выполнения i-той задачи.

Формат вывода:

Для каждого тестового случая выведите в отдельную строку единственное целое число – минимальное возможное время, необходимое для выполнения всех N задач.

Подзадачи:

Подзадача 1: 40 баллов

  • 1≤T≤10
  • 1≤N≤3
  • 1≤Xi, Yi≤105

Подзадача 2: 60 баллов

  • 1≤T≤10
  • 1≤N≤2*104
  • 1≤Xi, Yi≤105

Примеры тестов:

Входные данные:

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();
}
Answer 1

Поскольку ошибка уже указана, я только добавлю: для указанных входных данных 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;
}
Answer 2

Всем спасибо за помощь ! Я нашёл ошибку

    if ((i + 1) % 2 != 0)sn += kseniya[ii];
    else sn += yana[ii];
}

здесь нужно ii написать ! Слепой как кот))

Answer 3

Я бы создал функцию int calcolate и в параметрах указать кто делает задачу и собственно время и число операций , и пустить рекурсию. Главное не забыть закинуть в функцию чтобы каждый стек функции менял того кто делает эту задачу. Алгоритм понятен? Реализация уже на ваших плечах

Answer 4

у тебя стоят одинаковые условия на суммирование

"if((i+1)%2!=0)"
READ ALSO
MFC. Использование фильтра при работе с ODBC

MFC. Использование фильтра при работе с ODBC

Нужно из таблицы Books получить записи с полем gener_id = 2С этим полем связана таблица Genres

318
Не корректно работает localStorage

Не корректно работает localStorage

Подскажите, почему некорректно работает localStorage в Safari и iOSЕсть две страницы

319