# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
778358 | 2023-07-10T08:52:02 Z | danikoynov | Sorting (IOI15_sorting) | C++14 | 1000 ms | 9868 KB |
#include "sorting.h" #include<bits/stdc++.h> using namespace std; const int maxn = 2e5 + 10; int n, arr[maxn], used[maxn]; vector < pair < int, int > > edges; int count_steps() { for (int i = 0; i < n; i ++) used[i] = 0; int ans = 0; for (int i = 0; i < n; i ++) { if (used[i]) continue; int v = arr[i], cnt = 0; while(v != i) { used[v] = 1; cnt ++; v = arr[v]; } used[v] = 1; cnt ++; ans = ans + (cnt - 1); } return ans; } void build_edges() { for (int i = 0; i < n; i ++) used[i] = 0; for (int i = 0; i < n; i ++) { if (used[i]) continue; vector < int > ord; int v = arr[i]; while(v != i) { ord.push_back(v); used[v] = 1; v = arr[v]; } ord.push_back(i); used[i] = 1; for (int i = 0; i < ord.size() - 1; i ++) edges.push_back({arr[ord[i]], arr[ord[i + 1]]}); } } int pos[maxn]; int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) { n = N; bool sorted = true; for (int i = 0; i < N; i ++) if (S[i] != i) sorted = false; if (sorted) return 0; for (int i = 0; i < N; i ++) arr[i] = S[i]; int pivot = -1; for (int i = 0; i < M; i ++) { swap(arr[X[i]], arr[Y[i]]); int steps = count_steps(); /**cout << "--------------" << endl; for (int j = 0; j < N; j ++) cout << arr[j] << " "; cout << endl; cout << steps << endl;*/ if (steps <= i + 1) { pivot = i; break; } } ///assert(pivot != -1); ///cout << pivot << endl; ///exit(0); build_edges(); for (int i = 0; i < n; i ++) pos[S[i]] = i; for (int i = 0; i < edges.size(); i ++) { int id1 = 0, id2 = 0; while(pos[id1] != X[i]) id1 ++; while(pos[id2] != Y[i]) id2 ++; swap(pos[id1], pos[id2]); ///cout << edges[i].first << " : " << edges[i].second << endl; P[i] = pos[edges[i].first]; Q[i] = pos[edges[i].second]; swap(pos[edges[i].first], pos[edges[i].second]); ///cout << id1 << " : " << id2 << endl; ///swap(pos[X[i]], pos[Y[i]]); } int left = pivot - edges.size() + 1; if (left % 2 == 0) { for (int i = edges.size(); i <= pivot; i ++) { P[i] = 0; Q[i] = 1; } } else { for (int i = edges.size(); i < pivot; i ++) { P[i] = 0; Q[i] = 1; } P[pivot] = Q[pivot] = 0; } /**for (int i = 0; i <= pivot; i ++) { swap(S[X[i]], S[Y[i]]); swap(S[P[i]], S[Q[i]]); }*/ /**for (int i = 0; i < N; i ++) cout << S[i] << " "; cout << endl;*/ ///cout << "stop " << edges.size() << " " << pivot << endl; return pivot + 1; }
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 212 KB | Output is correct |
2 | Correct | 0 ms | 212 KB | Output is correct |
3 | Correct | 0 ms | 212 KB | Output is correct |
4 | Correct | 0 ms | 212 KB | Output is correct |
5 | Correct | 0 ms | 212 KB | Output is correct |
6 | Correct | 0 ms | 212 KB | Output is correct |
7 | Correct | 0 ms | 212 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 212 KB | Output is correct |
2 | Correct | 0 ms | 212 KB | Output is correct |
3 | Correct | 0 ms | 212 KB | Output is correct |
4 | Correct | 0 ms | 212 KB | Output is correct |
5 | Correct | 0 ms | 212 KB | Output is correct |
6 | Correct | 0 ms | 212 KB | Output is correct |
7 | Correct | 0 ms | 212 KB | Output is correct |
8 | Correct | 0 ms | 212 KB | Output is correct |
9 | Correct | 0 ms | 284 KB | Output is correct |
10 | Correct | 0 ms | 340 KB | Output is correct |
11 | Correct | 0 ms | 340 KB | Output is correct |
12 | Correct | 1 ms | 340 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 212 KB | Output is correct |
2 | Correct | 0 ms | 212 KB | Output is correct |
3 | Correct | 1 ms | 256 KB | Output is correct |
4 | Correct | 1 ms | 340 KB | Output is correct |
5 | Correct | 1 ms | 332 KB | Output is correct |
6 | Correct | 1 ms | 312 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 212 KB | Output is correct |
2 | Correct | 0 ms | 212 KB | Output is correct |
3 | Correct | 0 ms | 212 KB | Output is correct |
4 | Correct | 0 ms | 212 KB | Output is correct |
5 | Correct | 0 ms | 212 KB | Output is correct |
6 | Correct | 0 ms | 212 KB | Output is correct |
7 | Correct | 0 ms | 212 KB | Output is correct |
8 | Correct | 0 ms | 212 KB | Output is correct |
9 | Correct | 0 ms | 284 KB | Output is correct |
10 | Correct | 0 ms | 340 KB | Output is correct |
11 | Correct | 0 ms | 340 KB | Output is correct |
12 | Correct | 1 ms | 340 KB | Output is correct |
13 | Correct | 0 ms | 212 KB | Output is correct |
14 | Correct | 0 ms | 212 KB | Output is correct |
15 | Correct | 1 ms | 256 KB | Output is correct |
16 | Correct | 1 ms | 340 KB | Output is correct |
17 | Correct | 1 ms | 332 KB | Output is correct |
18 | Correct | 1 ms | 312 KB | Output is correct |
19 | Correct | 0 ms | 212 KB | Output is correct |
20 | Correct | 0 ms | 212 KB | Output is correct |
21 | Correct | 2 ms | 452 KB | Output is correct |
22 | Correct | 2 ms | 456 KB | Output is correct |
23 | Correct | 2 ms | 528 KB | Output is correct |
24 | Correct | 2 ms | 456 KB | Output is correct |
25 | Correct | 1 ms | 468 KB | Output is correct |
26 | Correct | 1 ms | 456 KB | Output is correct |
27 | Correct | 2 ms | 452 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 9 ms | 340 KB | Output is correct |
2 | Correct | 12 ms | 456 KB | Output is correct |
3 | Correct | 11 ms | 496 KB | Output is correct |
4 | Correct | 1 ms | 340 KB | Output is correct |
5 | Correct | 1 ms | 468 KB | Output is correct |
6 | Correct | 2 ms | 468 KB | Output is correct |
7 | Correct | 5 ms | 468 KB | Output is correct |
8 | Correct | 11 ms | 468 KB | Output is correct |
9 | Correct | 11 ms | 520 KB | Output is correct |
10 | Correct | 11 ms | 576 KB | Output is correct |
11 | Correct | 10 ms | 468 KB | Output is correct |
12 | Correct | 5 ms | 468 KB | Output is correct |
13 | Correct | 10 ms | 452 KB | Output is correct |
14 | Correct | 1 ms | 468 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 9 ms | 340 KB | Output is correct |
2 | Correct | 12 ms | 456 KB | Output is correct |
3 | Correct | 11 ms | 496 KB | Output is correct |
4 | Correct | 1 ms | 340 KB | Output is correct |
5 | Correct | 1 ms | 468 KB | Output is correct |
6 | Correct | 2 ms | 468 KB | Output is correct |
7 | Correct | 5 ms | 468 KB | Output is correct |
8 | Correct | 11 ms | 468 KB | Output is correct |
9 | Correct | 11 ms | 520 KB | Output is correct |
10 | Correct | 11 ms | 576 KB | Output is correct |
11 | Correct | 10 ms | 468 KB | Output is correct |
12 | Correct | 5 ms | 468 KB | Output is correct |
13 | Correct | 10 ms | 452 KB | Output is correct |
14 | Correct | 1 ms | 468 KB | Output is correct |
15 | Execution timed out | 1049 ms | 9868 KB | Time limit exceeded |
16 | Halted | 0 ms | 0 KB | - |