Submission #1177661


Source Code Expand

#include <iostream>
#include <string>
#include <list>
#include <vector>
#include <queue>
#include <algorithm>
#include <climits>
#include <cstring>
#define int long long
#define uint unsigned long long
#define CONTAINS(v,n) (find((v).begin(), (v).end(), (n)) != (v).end())
#define SORT(v) sort((v).begin(), (v).end())
#define RSORT(v) sort((v).rbegin(), (v).rend())
#define ARY_SORT(a, size) sort((a), (a)+(size))
#define MAX(a,b) (((a) > (b)) ? (a) : (b))
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
using namespace std;

int INIT = 1000000000000000L; //10^5 * 10^9 * 10

int N;
int A[100000];
char op[100000];

int max_dp[100000];
int min_dp[100000];

int get_max(int n);
int get_min(int n);

int get_max(int n) //n以降を作って作れるで最大の数
{
	if (n == N - 1)
	{
		return A[n];
	}

	if (max_dp[n] < INIT)
	{
		return max_dp[n];
	}

	int res;
	if (n == 0 || op[n - 1] == '+')
 	{
		res = A[n] + get_max(n + 1);
	}
	else
	{
		int d1 = -A[n] + get_max(n + 1);
		int d2 = -(A[n] + get_max(n + 1));
		int d3 = -A[n] + get_min(n + 1);
		int d4 = -(A[n] + get_min(n + 1));
		if (d1 >= d2 && d1 >= d3 && d1 >= d4)
		{
			res = d1;
		}
		else if (d2 >= d1 && d2 >= d3 && d2 >= d4)
		{
			res = d2;
		}
		else if (d3 >= d1 && d3 >= d2 && d3 >= d4)
		{
			res = d3;
		}
		else if (d4 >= d1 && d4 >= d2 && d4 >= d3)
		{
			res = d4;
		}
	}
	max_dp[n] = res;
	return res;
}

int get_min(int n) //n以降を作って作れるで最小の数
{
	if (n == N - 1)
	{
		return A[n];
	}

	if (min_dp[n] < INIT)
	{
		return min_dp[n];
	}

	int res;
	if (n == 0 || op[n - 1] == '+')
	{
		res = A[n] + get_min(n + 1);
	}
	else
	{
		int d1 = -A[n] + get_max(n + 1);
		int d2 = -(A[n] + get_max(n + 1));
		int d3 = -A[n] + get_min(n + 1);
		int d4 = -(A[n] + get_min(n + 1));
		if (d1 <= d2 && d1 <= d3 && d1 <= d4)
		{
			res = d1;
		}
		else if (d2 <= d1 && d2 <= d3 && d2 <= d4)
		{
			res = d2;
		}
		else if (d3 <= d1 && d3 <= d2 && d3 <= d4)
		{
			res = d3;
		}
		else if (d4 <= d1 && d4 <= d2 && d4 <= d3)
		{
			res = d4;
		}
	}
	min_dp[n] = res;
	return res;
}

signed main()
{
	cin >> N;
	for (int i = 0; i < N; i++)
	{
		cin >> A[i];
		if (i < N - 1) cin >> op[i];
	}
	for (int i = 0; i < N; i++)
	{
		max_dp[i] = INIT;
		min_dp[i] = INIT;
	}
	cout << get_max(0) << endl;
}

Submission Info

Submission Time
Task E - Addition and Subtraction Hard
User y_kawano
Language C++14 (GCC 5.4.1)
Score 0
Code Size 2412 Byte
Status WA
Exec Time 55 ms
Memory 8960 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 900
Status
AC × 3
AC × 13
WA × 16
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, subtask_1_alladd_01.txt, subtask_1_alladd_02.txt, subtask_1_alladd_03.txt, subtask_1_alladd_04.txt, subtask_1_allsub_01.txt, subtask_1_allsub_02.txt, subtask_1_allsub_03.txt, subtask_1_allsub_04.txt, subtask_1_cont_01.txt, subtask_1_cont_02.txt, subtask_1_cont_03.txt, subtask_1_cont_04.txt, subtask_1_killer_01.txt, subtask_1_killer_02.txt, subtask_1_killer_03.txt, subtask_1_killer_04.txt, subtask_1_max_01.txt, subtask_1_max_02.txt, subtask_1_max_03.txt, subtask_1_max_04.txt, subtask_1_min_01.txt, subtask_1_min_02.txt, subtask_1_rand_01.txt, subtask_1_rand_02.txt, subtask_1_rand_03.txt, subtask_1_rand_04.txt
Case Name Status Exec Time Memory
sample_01.txt AC 1 ms 256 KB
sample_02.txt AC 1 ms 256 KB
sample_03.txt AC 1 ms 256 KB
subtask_1_alladd_01.txt AC 54 ms 8960 KB
subtask_1_alladd_02.txt AC 52 ms 8960 KB
subtask_1_alladd_03.txt AC 52 ms 8960 KB
subtask_1_alladd_04.txt AC 52 ms 8960 KB
subtask_1_allsub_01.txt AC 55 ms 8960 KB
subtask_1_allsub_02.txt AC 55 ms 8960 KB
subtask_1_allsub_03.txt AC 55 ms 8960 KB
subtask_1_allsub_04.txt AC 55 ms 8960 KB
subtask_1_cont_01.txt WA 30 ms 4992 KB
subtask_1_cont_02.txt WA 23 ms 3840 KB
subtask_1_cont_03.txt WA 19 ms 3200 KB
subtask_1_cont_04.txt WA 5 ms 896 KB
subtask_1_killer_01.txt WA 50 ms 8320 KB
subtask_1_killer_02.txt WA 35 ms 5888 KB
subtask_1_killer_03.txt WA 51 ms 8576 KB
subtask_1_killer_04.txt WA 35 ms 5888 KB
subtask_1_max_01.txt WA 54 ms 8960 KB
subtask_1_max_02.txt WA 54 ms 8960 KB
subtask_1_max_03.txt WA 54 ms 8960 KB
subtask_1_max_04.txt WA 54 ms 8960 KB
subtask_1_min_01.txt AC 1 ms 256 KB
subtask_1_min_02.txt AC 1 ms 256 KB
subtask_1_rand_01.txt WA 33 ms 5504 KB
subtask_1_rand_02.txt WA 39 ms 6528 KB
subtask_1_rand_03.txt WA 6 ms 1024 KB
subtask_1_rand_04.txt WA 17 ms 2816 KB