Submission #1212203

#TimeUsernameProblemLanguageResultExecution timeMemory
1212203DippleThreeArranging Shoes (IOI19_shoes)C++20
45 / 100
355 ms146036 KiB
#include "shoes.h"

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

long long count_swaps(std::vector<int> s) {
    ll ans = 0;
    map<int, queue<int>> pos;
    int n = s.size();
    for (int i = 0; i < n; i++){
        pos[s[i]].push(i);
    }
    vector<bool> used(n, false);
    int curr = 0;
    for (int i = 0; i < n; i++){
        if (used[i]) continue;
        pos[s[i]].pop();
        used[i] = true;
        int j = pos[-s[i]].front();
        pos[-s[i]].pop();
        used[j] = true;
        ans += abs(i - curr) + abs(j - (curr+1));
        curr += 2;
        if (s[i] > 0) ans += 2;
    }
    return ans / 2;
}


#ifdef LOCAL
#include <cstdio>
#include <cassert>
int main() {
	int n;
	assert(1 == scanf("%d", &n));
	vector<int> S(2 * n);
	for (int i = 0; i < 2 * n; i++)
		assert(1 == scanf("%d", &S[i]));
	fclose(stdin);

	long long result = count_swaps(S);

	printf("%lld\n", result);
	fclose(stdout);
	return 0;
}
#endif
#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...