задача на вектор

285
18 июня 2018, 20:00

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

        входные данные
        4
        4 1 2 10
        выходные данные
        12 5

Сережа возьмет карточки с числами 10 и 2, таким образом сумма Сережи 12. Дима возьмет все остальные карточки с суммой 5.

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n, sergo = 0, dima = 0, m, k, c;
    cin >> n;
    vector <int> v(n);
    for(int i = 0; i < n; i++){
        cin >> v[i];
    }
    for(int i = 0; i < n; i++){
        if(v[i] > v.back() - i){
            sergo = sergo + v[i];
            v.erase(v.begin());
        }else{
            sergo = sergo + v.back();
            v.pop_back();
        }
        if(v[i] > v.back() - i){
            dima = dima + v[i];
            v.erase(v.begin());
        }else{
            dima = dima + v.back();
            v.pop_back();
        }
    }
    cout << sergo << dima;
}
Answer 1

Я бы взял дек и сделал так:

int main()
{
    deque<int> d;
    int N, score[2] = { 0 };
    cin >> N;
    for(int i = 0, n; i < N; ++i)
    {
        cin >> n;
        d.push_back(n);
    }
    N = 0;
    while(!d.empty())
    {
        if (d.back() > d.front())
        {
            score[N] += d.back();
            d.pop_back();
        }
        else
        {
            score[N] += d.front();
            d.pop_front();
        }
        N = 1 - N;
    }
    cout << score[0] << " " << score[1] << endl;
}

Вы пытаетесь работать с вектором, что неудобно, и в одной итерации цикла обрабатывать (и удалять) сразу 2 элемента, что приводит к ошибке...

Answer 2

Хм, у меня вышло что-то вроде такого..

#include <iostream>
#include <vector>
int main()
{
    std::vector<int> cards;
    int dimaScore = 0;
    int sergeiScore = 0;
    int cardsQnt = 0;
    std::cout << "Enter cards qunatity : ";
    std::cin >> cardsQnt;
    for (int i = 0; i < cardsQnt; i++)
    {
        int card;
        std::cout << "Enter card #" << i << ": ";
        std::cin >> card;
        cards.push_back(card);
    }
    while (!cards.empty())
    {
        //Ход Cережи
        if(cards.back() > cards[0])
        {
            sergeiScore += cards.back();
            cards.pop_back();
        }else
        {
            sergeiScore += cards[0];
            cards.erase(cards.begin());
        }
        //Ход Димы
        if(!cards.empty())
        {
            if (cards.back() > cards[0])
            {
                dimaScore += cards.back();
                cards.pop_back();
            }
            else
            {
                dimaScore += cards[0];
                cards.erase(cards.begin());
            }
        }
    }
    std::cout << "Sergei is : " << sergeiScore << std::endl;
    std::cout << "Dima is :" << dimaScore << std::endl;
    system("pause");
}
READ ALSO
Что нужно сделать, чтобы при компиляции под x64_32 передать ссылку на функцию?

Что нужно сделать, чтобы при компиляции под x64_32 передать ссылку на функцию?

При вызове MessageSubscribe в hCallback передаётся часть кода функции main_loop, а не указательИзменение HPROC на void* ничего не меняет

253
Можно ли хранить объекты разных классов (производных одного абстрактного класса) в одном массиве или списке?

Можно ли хранить объекты разных классов (производных одного абстрактного класса) в одном массиве или списке?

Допустим имеется один абстрактный класс: Word - от него производим два класса: Noun и VerbТут сталкиваемся с вопросом: как хранить объекты этих классов?...

260
Не создаётся QWidget без Qapplication

Не создаётся QWidget без Qapplication

Когда я скомпилировал мой qt проект , он показал такую ошибкуПочему ??

245
Что значит static class

Что значит static class

Что означает данная конструкция

307