Advertisement
mickypinata

CUBE-T006: C-Value

Jun 11th, 2021
865
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.29 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. enum index {
  5.     EVEN = 0, ODD = 1
  6. };
  7.  
  8. typedef long long lli;
  9.  
  10. const int N = 1e6;
  11. const int Nd2 = 5e5;
  12.  
  13. lli qsum[2][Nd2 + 10], dp[2];
  14.  
  15. int main(){
  16.  
  17.     int nNumber;
  18.     scanf("%d", &nNumber);
  19.     int lastEven = nNumber >> 1;
  20.     int lastOdd = (nNumber + 1) >> 1;
  21.     for(int i = 1; i <= nNumber; ++i){
  22.         int x;
  23.         scanf("%d", &x);
  24.         int idx = (i + 1) >> 1;
  25.         if(i % 2 == 0){
  26.             qsum[EVEN][idx] += qsum[EVEN][idx - 1] + x;
  27.         } else {
  28.             qsum[ODD][idx] += qsum[ODD][idx - 1] + x;
  29.         }
  30.     }
  31.  
  32.     lli mn = 1e18;
  33.     for(int i = 1; i <= nNumber; ++i){
  34.         int curr = i % 2;
  35.         int prev = curr ^ 1;
  36.         int idx = (i + 1) >> 1;
  37.         if(i % 2 == 0){
  38.             int x = qsum[EVEN][idx] - qsum[EVEN][idx - 1];
  39.             dp[curr] = min(dp[prev] - x, qsum[EVEN][idx - 1] - qsum[ODD][idx] - x);
  40.         } else {
  41.             int x = qsum[ODD][idx] - qsum[ODD][idx - 1];
  42.             dp[curr] = min(dp[prev] + x, qsum[EVEN][idx - 1] - qsum[ODD][idx - 1] + x);
  43.         }
  44.         mn = min(mn, dp[curr] + qsum[EVEN][lastEven] - qsum[EVEN][idx] - qsum[ODD][lastOdd] + qsum[ODD][idx]);
  45.     }
  46.     cout << min(mn, qsum[EVEN][lastEven] - qsum[ODD][lastOdd]);
  47.  
  48.     return 0;
  49. }
  50.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement