Advertisement
MathQ_

Untitled

Jun 17th, 2022
742
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.05 KB | None | 0 0
  1. int dist(int i, int j, int n) {
  2.     if (i > j) swap(i, j);
  3.     return min(j - i, i + n - j);
  4. }
  5.  
  6. ll get(int j, vector<ll> a) {
  7.     ll s = 0;
  8.     for (int i = 0; i < sz(a); ++i) {
  9.         s += a[i] * dist(i, j, sz(a));
  10.     }
  11.     return s;
  12. }
  13.  
  14. int main() {
  15.     int n;
  16.     cin >> n;
  17.     vector<ll> a(n);
  18.     cin >> a;
  19.     ll sum = 0;
  20.     for (int i = 0; i <= n / 2; ++i) sum += a[i] * i;
  21.     for (int i = n - 1; i > n / 2; --i) sum += a[i] * (n - i);
  22.     ll sum1 = accumulate(a.begin() + 1, a.begin() + n / 2 + 1, 0ll);
  23.     ll sum2 = a[0] + accumulate(a.begin() + n / 2 + 1, a.end(), 0ll);
  24.     ll ans = sum;
  25.     int l1 = 1, r1 = n / 2;
  26.     int l2 = n / 2 + 1, r2 = n;
  27.     int kek = 0;
  28.     for (int i = 0; i < n; ++i) {
  29.         if (ans > sum) {
  30.             ans = sum;
  31.             kek = i;
  32.         }
  33.         sum = sum - sum1 + sum2;
  34.         ++r1; ++r2;
  35.         sum1 -= a[l1 % n];
  36.         sum1 += a[r1 % n];
  37.         sum2 -= a[l2 % n];
  38.         sum2 += a[r2 % n];
  39.         ++l1; ++l2;
  40.     }
  41.     cout << kek + 1 << '\n';
  42.     return 0;
  43. }
  44.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement