Submission #1248557

#TimeUsernameProblemLanguageResultExecution timeMemory
1248557KindaGoodGamesSorting (IOI15_sorting)C++20
0 / 100
22 ms584 KiB
#include<bits/stdc++.h> #include "sorting.h" using namespace std; #define pii pair<int,int> vector<pii> swaps; vector<pii> evil; vector<int> arr; int n; vector<pii> insertion_sort(vector<int> arr, vector<int> fin, int m){ vector<int> pos(n); vector<int> posF(n); for(int i = 0; i < n; i++){ pos[arr[i]] = i; posF[fin[i]] = i; } auto doSwap = [&](int a, int b){ swap(arr[a], arr[b]); pos[arr[a]] = a; pos[arr[b]] = b; }; vector<pii> ops; for(int i = 0; i < n; i++){ if (ops.size() > m) break; if(fin[i] == i) continue; // element that is currently at the position of i int oth = fin[posF[i]]; int p = fin[i]; doSwap(pos[oth],pos[p]); ops.push_back({pos[oth],pos[p]}); swap(fin[i], fin[posF[i]]); posF[fin[i]] = i; posF[fin[posF[i]]] = posF[i]; doSwap(arr[evil[ops.size()-1].first],arr[evil[ops.size()-1].second]); } return ops; } int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) { n = N; int ops = 0; arr.resize(N); evil.resize(M); for(int i = 0; i < M; i++){ evil[i] = {X[i], Y[i]}; } for(int i = 0; i < n; i++){ arr[i] = S[i]; } vector<int> cur = arr; for(int i = 0; i <= M; i++){ auto moves = insertion_sort(arr,cur, i); if(moves.size() <= i){ insertion_sort(arr,cur, i); for(int j = 0; j < moves.size(); j++){ P[j] = moves[j].first; Q[j] = moves[j].second; } for(int j = moves.size(); j <= i; j++){ P[j] = Q[j] = 0; } return i; } if(i == M) break; swap(cur[evil[i].first], cur[evil[i].second]); } return swaps.size(); }
#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...