Submission #1204688

#TimeUsernameProblemLanguageResultExecution timeMemory
1204688tapilyocaArranging Shoes (IOI19_shoes)C++20
10 / 100
1096 ms14404 KiB
#include "shoes.h"
#include<bits/stdc++.h>
using namespace std;

template<typename T>
using vec = vector<T>;
using ll = long long;
using vll = vec<ll>;
using pll = pair<ll,ll>;
#define pb push_back


long long count_swaps(std::vector<int> s) {
    ll n = s.size()>>1;
    ll out = 0;

    vll oop1, oop2;

    for(ll i = 0; i < n; i++) {
        map<ll,ll> dists;
        
        for(ll j = 2*i; j < 2 * n; j++) {
            if(s[j] > 0) {
                if(not dists[s[j]]) dists[s[j]] = (j - (2*i));
                else dists[s[j]] = min(dists[s[j]], j-(2*i));
            } else {
                if(not dists[s[j]]) dists[s[j]] = abs(j - (2*i)) - 1;
                else dists[s[j]] = min(dists[s[j]], abs(j-(2*i))-1);
            }
        }

        ll minshoe = -1;
        ll mn = 1e18;
        for(auto itr = dists.begin(); itr != dists.end(); itr++) {
            ll shoe = abs(itr->first);
            ll netDist = dists[shoe] + dists[-shoe];
            if(netDist < mn) {
                mn = netDist;
                minshoe = shoe;
            }
        }

        for(ll j = 2*i; j < 2*n; j++) {
            if(s[j] == -minshoe) {
                for(ll k = j; k > 2*i; k--) {
                    swap(s[k], s[k-1]);
                    out++;
                }
                break;
            }
        }

        for(ll j = 2*i; j < 2*n; j++) {
            if(s[j] == minshoe) {
                for(ll k = j; k > 2*i+1; k--) {
                    swap(s[k], s[k-1]);
                    out++;
                }
                break;
            }
        }
    }   

    // cerr << "Final array: ";
    // for(int &x : s) cerr << x << " ";
    // cerr << endl;

    return out;
}


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