Vladislav_Bezruk

e-olymp/798

Jun 12th, 2021 (edited)
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.85 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int main() {
  5.     int n, i;
  6.    
  7.     scanf("%d", &n);
  8.    
  9.     long long int engy[n];
  10.     int platf[n], from[i], ans[n], k = 1;
  11.    
  12.     engy[0] = 0;
  13.    
  14.     for (i = 0; i < n; i++) {
  15.         scanf("%d", &platf[i]);
  16.     }
  17.    
  18.     engy[0] = 0;
  19.     from[1] = 0;
  20.     engy[1] = abs(platf[1] - platf[0]);
  21.    
  22.     for (i = 2; i < n; i++) {
  23.         if ((engy[i - 1] + abs(platf[i] - platf[i - 1])) > (engy[i - 2] + 3 * abs(platf[i] - platf[i - 2]))) {
  24.             engy[i] = engy[i - 2] + 3 * abs(platf[i] - platf[i - 2]);
  25.             from[i] = i - 2;
  26.         } else {
  27.             engy[i] = engy[i - 1] + abs(platf[i] - platf[i - 1]);
  28.             from[i] = i - 1;
  29.         }
  30.     }
  31.    
  32.     printf("%d\n", engy[n - 1]);
  33.    
  34.     i = n - 1;
  35.     ans[0] = n;
  36.    
  37.     while (i != 0) {
  38.         ans[k] = from[i] + 1;
  39.         k++;
  40.         i = from[i];
  41.     }
  42.    
  43.     printf("%d\n", k);
  44.    
  45.     for (i = k - 1; i >= 0; i--) {
  46.         printf("%d ", ans[i]);
  47.     }
  48.    
  49.     return 0;
  50. }
Add Comment
Please, Sign In to add comment