Задача "Игра - 2" валится на 12 тесте

(Время: 1 сек. Память: 16 Мб Сложность: 45%) Вы любите играть в игры? Конечно, любите! Но про эту игру, возможно, ничего не знаете и не слышали даже. Что ж, расскажем о новой игре. На доске написана последовательность n целых чисел. Играют двое. На очередном ходе игрок выбирает число с правого или с левого края последовательности, затем это число стирается и последовательность становится на одно число меньше, а ход переходит к противнику. Выигрывает тот, кто наберет в сумме больше. Написать программу, определяющую победителя в конкретной игре, при условии, что игроки будут играть оптимально.

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

В первой строке входного файла INPUT.TXT записано целое число n (0 < n < 100). Во второй строке через пробел заданы n натуральных чисел, не превосходящих 1000.

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

В единственную строку выходного файла OUTPUT.TXT нужно вывести 1, если победит первый игрок, 2 – если победит второй игрок и 0 – в случае ничьей. Вот код:

#include <iostream>
#include <vector>
using namespace std;

bool fmax(int a, int b){
    return a > b;
}

int main() {
    int n;
    cin >> n;
    vector<int> mas;
    for(int i = 0; i < n; i++) {
        int num;
        cin >> num;
        mas.push_back(num);
    }
    int flag = 0;
    int x = 0, y = 0;
    for (int i = 0; i < n; i++){
        if (mas.size() < 4){
            if (flag == 0) {
                if (mas[0] > mas[mas.size() - 1]) {
                    x += mas[0];
                    mas.erase(mas.begin() + 0);
                }
                else{
                    x += mas[mas.size() - 1];
                    mas.pop_back();
                }
            }
            else {
                if (mas[0] > mas[mas.size() - 1]) {
                    y += mas[0];
                    mas.erase(mas.begin() + 0);
                }
                else{
                    y += mas[mas.size() - 1];
                    mas.pop_back();
                }
            }
            flag = (flag + 1) % 2;
        }
        else {
            int a = mas[0] + mas[mas.size() - 2];
            int b = mas[mas.size() - 1] + mas[1];
            if (flag == 0) {
                if (b != a) {
                    if (b > a) {
                        x += mas[mas.size() - 1];
                        mas.pop_back();
                    } else {
                        x += mas[0];
                        mas.erase(mas.begin() + 0);
                    }
                }
                else{
                    if (fmax(mas[0], mas[mas.size() - 1])){
                        x += mas[0];
                        mas.erase(mas.begin() + 0);
                    }
                    else{
                        x += mas[mas.size() - 1];
                        mas.pop_back();
                    }
                }
            }
            else {
                if (b != a) {
                    if (b > a) {
                        y += mas[mas.size() - 1];
                        mas.pop_back();
                    } else {
                        y += mas[0];
                        mas.erase(mas.begin() + 0);
                    }
                }
                else {
                    if (fmax(mas[0], mas[mas.size() - 1])){
                        y += mas[0];
                        mas.erase(mas.begin() + 0);
                    }
                    else{
                        y += mas[mas.size() - 1];
                        mas.pop_back();
                    }
                }
            }
            flag = (flag + 1) % 2;
        }
    }
    if (x > y)
        cout << 1;
    else if (x < y)
        cout << 2;
    else
        cout << 0;
    return 0;
}

Ответы (0 шт):