Submission #1248589

#TimeUsernameProblemLanguageResultExecution timeMemory
1248589M_W_13Arranging Shoes (IOI19_shoes)C++20
50 / 100
1096 ms12872 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; #define rep(i, n) for (int i = 0; i < (n); i++) #define st first #define nd second #define pb push_back long long count_swaps(std::vector<int> s) { int n = ((int)s.size())/2; vector<ll> lewe[n + 1]; vector<ll> prawe[n + 1]; rep(i, 2 * n) { int x = abs(s[i]); if (s[i] < 0) { lewe[x].pb(i); } else { prawe[x].pb(i); } } ll ans = 0; rep(i, n + 1) { int sz = lewe[i].size(); rep(j, sz) { if (lewe[i][j] < prawe[i][j]) { ans--; } } } for (ll k = 0; k < 2 * n; k += 2) { ll mini = 1e9; int it = 0; rep(i, n + 1) { int sz = lewe[i].size(); if (sz > 0) { ll dl = lewe[i][0] + prawe[i][0] - 2 * k; if (dl < mini) { mini = dl; it = i; } } } int p1 = lewe[it][0]; int p2 = prawe[it][0]; ans += mini; s[p1] = 0; s[p2] = 0; int c = 0; for (int i = 2 * n - 1; i >= k; i--) { if (s[i] == 0) { c++; } else { s[i + c] = s[i]; } } rep(i, n + 1) { lewe[i].clear(); prawe[i].clear(); } for (int i = k + 2; i < 2 * n; i++) { int x = abs(s[i]); if (s[i] < 0) { lewe[x].pb(i); } else { prawe[x].pb(i); } } } return ans; }
#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...