Задача "Игра - 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;
}