Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int dist(int i, int j, int n) {
- if (i > j) swap(i, j);
- return min(j - i, i + n - j);
- }
- ll get(int j, vector<ll> a) {
- ll s = 0;
- for (int i = 0; i < sz(a); ++i) {
- s += a[i] * dist(i, j, sz(a));
- }
- return s;
- }
- int main() {
- int n;
- cin >> n;
- vector<ll> a(n);
- cin >> a;
- ll sum = 0;
- for (int i = 0; i <= n / 2; ++i) sum += a[i] * i;
- for (int i = n - 1; i > n / 2; --i) sum += a[i] * (n - i);
- ll sum1 = accumulate(a.begin() + 1, a.begin() + n / 2 + 1, 0ll);
- ll sum2 = a[0] + accumulate(a.begin() + n / 2 + 1, a.end(), 0ll);
- ll ans = sum;
- int l1 = 1, r1 = n / 2;
- int l2 = n / 2 + 1, r2 = n;
- int kek = 0;
- for (int i = 0; i < n; ++i) {
- if (ans > sum) {
- ans = sum;
- kek = i;
- }
- sum = sum - sum1 + sum2;
- ++r1; ++r2;
- sum1 -= a[l1 % n];
- sum1 += a[r1 % n];
- sum2 -= a[l2 % n];
- sum2 += a[r2 % n];
- ++l1; ++l2;
- }
- cout << kek + 1 << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement