Submission #1304936

#TimeUsernameProblemLanguageResultExecution timeMemory
1304936thegodbridgexdRotating Lines (APIO25_rotate)C++20
5 / 100
3095 ms1600 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define matrix vector<vector<int>>
#define fi first
#define se second
#define BIG __int128
#define wtf pair<int,int>
#define db long double
#define filename "input"
const int N = 50000;
int n, a[N], b[N];
//MAIN
void rotate(std::vector<int> t, int x);
bool cmp(int i, int j){
    return a[i] < a[j];
}
ll tinh(){
    ll kq = 0;
    for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++){
        int c = abs(a[i] - a[j]);
        kq += min(c, N - c);
    }
    return kq;
}
void energy(int nigga, vector<int> vienna){
    n = nigga;
    for (int i = 0; i < n; i++) a[i] = vienna[i], b[i] = i;
    sort(b, b + n, cmp);
    int mid = n / 2;
    for (int i = 0; i < mid; i++) if (a[b[i]] >= N / 2){
        rotate({b[i]}, (N / 2 - 1) - a[b[i]] + 2 * N);
        a[b[i]] = N / 2 - 1;
    }
    for (int i = n - 1; i >= mid; i--) if (a[b[i]] < N / 2){
        rotate({b[i]}, N / 2 - a[b[i]]);
        a[b[i]] = N / 2;
    }
    ll last = tinh();
    while (true){
        bool check = true;
        for (int i = 0; i < mid; i++){
            int old = a[b[i]];
            a[b[i]] = N / 4;
            ll tmp = tinh();
            if (tmp > last){
                rotate({b[i]}, N / 4 - old + 2 * N);
                last = tmp;
                check = false;
            }
            else a[b[i]] = old;
        }
        for (int i = mid; i < n; i++){
            int old = a[b[i]];
            a[b[i]] = N / 2 + N / 4;
            ll tmp = tinh();
            if (tmp > last){
                rotate({b[i]}, N / 2 + N / 4 - old + 2 * N);
                last = tmp;
                check = false;
            }
            else a[b[i]] = old;
        }
        if (check) break;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...