Submission #1351920

#TimeUsernameProblemLanguageResultExecution timeMemory
1351920tvgkRotating Lines (APIO25_rotate)C++20
100 / 100
45 ms5060 KiB
#include<bits/stdc++.h>
#include "rotate.h"
using namespace std;
#define task "a"
#define se second
#define fi first
#define ll long long
#define ii pair<ll, ll>
const long mxN = 2e5 + 7, mid = 25e3, MOD = 5e4;

void energy(int n, vector<int> v)
{
    vector<ii> tmp;
    for (int i = 0; i < n; i++)
        tmp.push_back({v[i], i});
    sort(tmp.begin(), tmp.end());

    deque<ii> dq[2];
    for (ii i : tmp)
    {
        if (i.fi < mid)
            dq[0].push_back(i);
        else
            dq[1].push_back(i);
    }

    while (1)
    {
        int check = 0;
        for (int j = 0; j <= 1; j++)
        {
            if (dq[j].size() <= (n + 1) / 2 && (dq[j].size() && dq[j].back().fi == mid * j))
                check++;
        }
        if (check == 2)
            break;

        if (dq[0].size() == dq[1].size())
        {
            int mn = min(mid - dq[0].back().fi, MOD - dq[1].back().fi);

            vector<int> id;
            for (int j = 0; j <= 1; j++)
            {
                id.push_back(dq[j].back().se);
                dq[j].back().fi += mn;

                if (dq[j].back().fi >= mid * (j + 1))
                {
                    dq[j ^ 1].push_front({dq[j].back().fi % MOD, id.back()});
                    dq[j].pop_back();
                }
            }
            rotate(id, mn);

            continue;
        }

        if (dq[0].size() > dq[1].size())
        {
            vector<int> id;
            id.push_back(dq[0].back().se);
            //cerr << id[0] << " " << mid - dq[0].back().fi << '\n';
            rotate(id, mid - dq[0].back().fi);
            dq[1].push_front({mid, id[0]});
            dq[0].pop_back();
        }
        else
        {
            vector<int> id;
            id.push_back(dq[1].back().se);
            //cerr << id[0] << " " << MOD - dq[1].back().fi << '\n';
            rotate(id, MOD - dq[1].back().fi);
            dq[0].push_front({0, id[0]});
            dq[1].pop_back();
        }
    }
}

#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...