Submission #1276202

#TimeUsernameProblemLanguageResultExecution timeMemory
1276202KindaGoodGamesHoliday (IOI14_holiday)C++20
7 / 100
68 ms131072 KiB
#include"holiday.h" #include<bits/stdc++.h> using namespace std; #define int long long int solve(int n, int s, int d, vector<int> arr){ vector<vector<int>> left(d+1, vector<int>(d+1)); vector<vector<int>> right(d+1, vector<int>(d+1)); vector<int> bleft(d+1); vector<int> bright(d+1); int best = 0; for(int k = 0; k <= d; k++){ int sum = 0; int ma = 0; priority_queue<int, vector<int>, greater<int>> pq; for(int i = s; i < n; i++){ sum += arr[i]; int len = i-s; pq.push(arr[i]); if(len > k) break; while(len+pq.size() > k){ sum -= pq.top(); pq.pop(); } right[k][len] = sum; ma = max(ma,sum); } bright[k] = ma; } if(s == 0){ return bright[d]; } s--; for(int k = 0; k <= d; k++){ int sum = 0; int ma = 0; priority_queue<int, vector<int>, greater<int>> pq; for(int i = s; i >= 0; i--){ sum += arr[i]; int len = s-i; pq.push(arr[i]); if(len > k) break; while(len+pq.size() > k){ sum -= pq.top(); pq.pop(); } left[k][len] = sum; ma = max(ma,sum); } bleft[k] = ma; } int ans = 0; for(int l = 0; l <= d; l++){ for(int steps = 0; steps <= l; steps++){ int r = d-l-steps-1; if(r < 0) break; int c = 0; c += right[l][min(steps,l)]; c += bleft[r]; if(c > ans){ ans = c; } } } return ans; } long long findMaxAttraction(int32_t n, int32_t s, int32_t d, int32_t A[]) { vector<int> arr(n); for(int i = 0; i < n; i++){ arr[i] = A[i]; } int v1 = 0; v1 = solve(n,s,d,arr); reverse(arr.begin(),arr.end()); s = (n-1)-s; int v2 = 0; v2 = solve(n,s,d,arr); return max(v1,v2); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...