#include "rotate.h"
#include <vector>
#include <iostream>
#include <deque>
#include <array>
#include <algorithm>
#define ll long long
using namespace std;
void energy(int n, std::vector<int> v){
ll u = v[0];
deque <ll> dq[2];
vector <int> Q;
for (int i=0; i<n; ++i) {
Q.push_back(i);
(v[i] += (50000-u)) %= 50000;
}
rotate(Q, 50000-u);
vector <array<ll, 2>> V;
for (int i=1; i<n; ++i) {
V.push_back({v[i], i});
}
sort(V.begin(), V.end());
ll a[2] = {1, 0};
for (auto [x, y] : V) {
if (x == 0) ++a[0];
else if (x == 25000) ++a[1];
else if (x < 25000) dq[0].push_back(y);
else dq[1].push_back(y);
}
ll z = 25000;
if (a[0] < a[1]) {
z = 0, swap(dq[0], dq[1]);
swap(a[0], a[1]);
}
while (!dq[0].empty() || !dq[1].empty()) {
if (dq[0].size() >= dq[1].size()) {
auto u = dq[0].back();
dq[0].pop_back();
if (v[u] != z) rotate({(int)u}, (50000+z-v[u]) % 50000);
}
else {
auto u = dq[1].front();
dq[1].pop_front();
if (v[u] != z) rotate({(int)u}, (50000+z-v[u]) % 50000);
}
++a[1];
if (a[0] <= a[1]) {
z ^= 25000;
swap(dq[0], dq[1]);
swap(a[0], a[1]);
}
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |