Submission #764851

#TimeUsernameProblemLanguageResultExecution timeMemory
764851SanguineChameleonSorting (IOI15_sorting)C++17
36 / 100
49 ms848 KiB
#include "sorting.h" #include <bits/stdc++.h> using namespace std; const int maxN = 2e5 + 20; int cnt[maxN]; mt19937 gen(69420); bool cmp(int i, int j) { return cnt[i] < cnt[j]; } int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) { for (int i = 0; i < M; i++) { cnt[X[i]]++; cnt[Y[i]]++; } int len = 0; for (int i = 0; ; i++) { bool ok = true; for (int j = 0; j < N; j++) { if (S[j] != j) { ok = false; break; } } if (ok) { return len; } assert(i < M); cnt[X[i]]--; cnt[Y[i]]--; swap(S[X[i]], S[Y[i]]); vector<int> wrong; for (int j = 0; j < N; j++) { if (S[j] != j) { wrong.push_back(j); } } if (wrong.empty()) { P[len] = 0; Q[len] = 0; } else { if ((int)wrong.size() >= 10) { sort(wrong.begin(), wrong.end(), cmp); shuffle(wrong.begin(), wrong.begin() + 10, gen); } else { shuffle(wrong.begin(), wrong.end(), gen); } P[len] = wrong[0]; for (int j = 0; j < N; j++) { if (S[j] == wrong[0]) { Q[len] = j; break; } } } swap(S[P[len]], S[Q[len]]); len++; } }
#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...