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 |
|
|
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 |