제출 #944017

#제출 시각아이디문제언어결과실행 시간메모리
944017TAhmed33Homecoming (BOI18_homecoming)C++17
100 / 100
150 ms149736 KiB
#include <bits/stdc++.h> #include "homecoming.h" using namespace std; typedef long long ll; const int MAXN = 4e6 + 25; ll dp[MAXN], pref_a[MAXN], pref_b[MAXN]; ll solve (int n, int k, int *A, int *B) { for (int i = 0; i < 2 * n; i++) { pref_a[i] = pref_b[i] = dp[i] = 0; } for (int i = 0; i < n; i++) { pref_a[i] = A[i] + (i == 0 ? 0 : pref_a[i - 1]); } for (int i = 0; i < n + k; i++) { pref_b[i] = B[i % n] + (i == 0 ? 0 : pref_b[i - 1]); } ll ret = 0, cur = 0; for (int i = 0; i < n; i++) { dp[i] = pref_a[i] - pref_b[i + k - 1] + cur; if (i) dp[i] = max(dp[i], dp[i - 1]); else dp[i] = max(dp[i], 0ll); cur = max(cur, dp[i] - pref_a[i] + pref_b[i]); ret = max(ret, dp[i]); } cur = 0; for (int i = 0; i < n; i++) { dp[i] = pref_a[i] - pref_b[min(n - 1, i + k - 1)] + cur; if (i) dp[i] = max(dp[i], dp[i - 1]); cur = max(cur, dp[i] - pref_a[i] + pref_b[i]); } ret = max(ret, dp[n - 1]); return ret; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...