Submission #64333

#TimeUsernameProblemLanguageResultExecution timeMemory
64333antimirageHomecoming (BOI18_homecoming)C++17
100 / 100
304 ms135068 KiB
/** Death gotta be easy cause life is hard **/ #include <algorithm> #include <iostream> #include <assert.h> #include <string.h> #include <stdio.h> #include <iomanip> #include <utility> #include <math.h> #include <time.h> #include <vector> #include <set> #include <map> #include "homecoming.h" #define fr first #define sc second #define mk make_pair #define pb push_back #define sz(s) (int)s.size() #define all(s) s.begin(), s.end() using namespace std; const int N = 4e6 + 5; long long n, k, a[N], b[N]; long long dp[N][2], pref[N], inf = 1e16; long long sum(int i) { return pref[i + k - 1] - (i == 0 ? 0 : pref[i - 1]); } long long Main( bool fl ) { for (int i = 0; i < n + n; i++) pref[i] = pref[i - 1] + b[i]; for (int i = 0; i < n; i++) dp[i][0] = dp[i][1] = -inf; if (fl) dp[0][1] = a[0] + sum(0); else dp[0][0] = 0; for (int i = 1; i < n; i++) { dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]); if (i + k - 1 < n) dp[i][1] = max( dp[i - 1][1] + b[i + k - 1], dp[i - 1][0] + sum(i) ) + a[i]; else { if (fl) dp[i][1] = max( dp[i - 1][1], dp[i - 1][0] + pref[n - 1] - pref[i - 1] ) + a[i]; else dp[i][1] = max( dp[i - 1][1] + b[i + k - 1], dp[i - 1][0] + sum(i) ) + a[i]; } } return max( dp[n - 1][0], dp[n - 1][1] ); } long long solve(int N, int K, int A[], int B[]) { n = N, k = K; for (int i = 0; i < n; i++) a[i] = A[i], b[i] = -B[i]; for (int i = 0; i < n; i++) b[i + n] = -B[i]; return max(Main(0), Main(1)); } /** 1 3 2 40 80 100 140 0 20 **/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...