Submission #1173980

#TimeUsernameProblemLanguageResultExecution timeMemory
1173980somefolkArranging Shoes (IOI19_shoes)C++20
0 / 100
0 ms324 KiB
#include <iostream> #include <cmath> #include <algorithm> #include <string> #include <vector> #include <map> #include <unordered_map> #include <queue> #include <set> #include <unordered_set> #include <complex> #include <list> #include <cassert> #include <chrono> #include <random> #include <stack> #include <iomanip> #include <fstream> using namespace std; #define endl "\n" #define int long long const int INF = 1e5+7; const int MOD = 1e9+7; int top(unordered_map<int, int> &dist){ int mn1 = -1, mn2 = INF; for(auto &i : dist){ if(i.second < mn2){ mn1 = i.first; mn2 = i.second; } } return mn1; } int64_t count_swaps(vector<int32_t> a){ int n = a.size(); if(n == 1){ if(a[1] < a[0]) return 1; else return 0; } else if(n <= 8){ unordered_map<int, set<int>> mid; unordered_map<int, int> used; for(int i = 0; i < n; i++){ if(!used[abs(a[i])]){ used[abs(a[i])] = true; for(int j = i+1; j < n; j++){ if(abs(a[j]) == abs(a[i])) break; mid[abs(a[i])].insert(abs(a[j])); } } } unordered_map<int, int> dist; for(int i = 0; i < n; i++){ if(used[abs(a[i])]){ used[abs(a[i])] = false; if(a[i] > 0) dist[abs(a[i])]++; dist[abs(a[i])] += i; } else { dist[abs(a[i])] = abs(dist[abs(a[i])] - i); } } int sol = 0, mn = top(dist); while(dist[mn] != INF){ sol += dist[mn]; dist[mn] = INF; for(auto &i : mid[mn]){ if(dist[i] != INF) dist[i]--; } mn = top(dist); } return sol; } else { vector<int> pos, neg; for(int i = 0; i < n; i++){ if(a[i] > 0 && i%2==0) pos.push_back(i); else if(a[i] < 0 && i%2!=0) neg.push_back(i); } int sol = 0, idx = 0; if(pos.size() < neg.size()){ for(auto &i : pos){ sol += abs(i-neg[idx]); idx++; } } else { for(auto &i : neg){ sol += abs(i-pos[idx]); idx++; } } return sol; } }
#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...