#define _CRT_SECURE_NO_WARNINGS
#include <vector>
using namespace std;
#define SUBMIT 1
void energy(int n, vector<int> v);
void rotate(vector<int> t, int x);
void energy(int n, vector<int> v) {
int nw1 = (v[0] + 25000) % 100000;
int d = (nw1 + 100000 - v[1]) % 100000;
rotate({ 1 }, d);
}
//grader
#if SUBMIT == 0
#include <cstdio>
#include <cstdlib>
#include <set>
static int total_cost = 0;
static vector<int> v;
static FILE* file_log;
static void printf_vector(vector<int> vec) {
printf("[");
for (int i = 0; i < (int)vec.size(); i++) {
if (i > 0) printf(", ");
printf("%d", vec[i]);
}
printf("]");
}
static long long calc_energy() {
long long res = 0;
for (int i = 0; i < (int)v.size(); i++) {
for (int j = i + 1; j < (int)v.size(); j++) {
int d = abs(v[i] - v[j]);
res += min(d, 50000 - d);
}
}
return res;
}
static long long last_energy;
void rotate(vector<int> t, int x) {
int k = (int)t.size();
total_cost += k;
if (total_cost > 2000000) {
printf("Too many rotations\n");
exit(0);
}
set<int> seen;
for (int i = 0; i < k; i++) {
if (t[i] < 0 || t[i] >= (int)v.size()) {
printf("Invalid index\n");
exit(0);
}
if (seen.find(t[i]) != seen.end()) {
printf("t has duplicate element\n");
exit(0);
}
v[t[i]] = (v[t[i]] + x) % 50000;
seen.insert(t[i]);
}
printf("rotate(");
printf_vector(t);
printf(", %d)\n", x);
printf("v <- ");
printf_vector(v);
printf("\n");
long long cur_energy = calc_energy();
printf("New energy: %lld\n", cur_energy);
printf("\n");
if (cur_energy < last_energy) {
printf("Energy decreased\n");
exit(0);
}
last_energy = cur_energy;
}
int main() {
int n;
scanf("%d", &n);
v.resize(n);
for (int i = 0; i < n; i++) {
scanf("%d", &v[i]);
}
last_energy = calc_energy();
file_log = fopen("log.txt", "w");
printf("Initial energy: %lld\n\n", last_energy);
energy(n, v);
fclose(file_log);
printf("%lld\n", calc_energy());
return 0;
}
#endif