Submission #1355186

#TimeUsernameProblemLanguageResultExecution timeMemory
1355186Trisanu_DasRotating Lines (APIO25_rotate)C++20
0 / 100
0 ms836 KiB
#include <bits/stdc++.h>
#include "rotate.h"
using namespace std;


void energy(int n, vector<int> v) {
    if (n <= 1) return;

    sort(v.begin(), v.end());
    vector<int> w = v;
    w.insert(w.end(), v.begin(), v.end());

    int best_shift = 0, best_diff = n;
    int cnt = 0, j = 0;
    for (int i = 0; i < n; ++i) {
        while (j < i + n && w[j] - w[i] < 25000) ++j;
        int cur = j - i;              
        int diff = abs(cur - n/2);
        int shift = (50000 - w[i]) % 50000;
        if (diff < best_diff) {
            best_diff = diff;
            best_shift = shift;
        }
    }

    if (best_shift != 0) {
        vector<int> all(n);
        iota(all.begin(), all.end(), 0);
        rotate(all, best_shift);
        for (int &x : v) x = (x + best_shift) % 50000;
    }

    vector<int> target(n);
    vector<pair<int, int>> order; 
    for (int i = 0; i < n; ++i) {
        target[i] = (v[i] < 25000) ? 0 : 25000;
        int dist = min(abs(v[i] - target[i]), 50000 - abs(v[i] - target[i]));
        order.emplace_back(dist, i);
    }
    sort(order.rbegin(), order.rend());
    for (auto [dist, i] : order) {
        int move = (target[i] - v[i] + 50000) % 50000;
        if (move != 0) {
            rotate({i}, move);
            v[i] = target[i];
        }
    }
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...