QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#236523 | #2789. Sorting | Camillus | 36 | 18ms | 4408kb | C++20 | 2.9kb | 2023-11-04 01:11:38 | 2023-11-04 01:11:39 |
Judging History
answer
#include "bits/stdc++.h"
#include "sorting.h"
using namespace std;
mt19937 rnd(228);
bool is_sorted(const vector<int> &s) {
int n = (int)s.size();
for (int i = 0; i + 1 < n; i++) {
if (s[i + 1] < s[i]) {
return false;
}
}
return true;
}
int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
int n = N;
vector<int> p(S, S + N);
vector<int> d(S, S + N);
if (is_sorted(p)) {
return 0;
}
swap(p[X[0]], p[Y[0]]);
vector<int> num(n, -1);
vector<set<int>> cycles;
for (int u = 0; u < n; u++) {
d[p[u]] = u;
if (num[u] != -1) {
continue;
}
cycles.emplace_back();
int x = (int)cycles.size() - 1;
auto &cycle = cycles.back();
int v = u;
while (num[v] == -1) {
num[v] = x;
cycle.insert(v);
v = p[v];
}
}
set<int> not_alone;
for (int u = 0; u < n; u++) {
if (p[u] != u) {
not_alone.insert(u);
}
}
auto do_swap = [&](int u, int v) -> void {
assert(num[u] == num[v]);
not_alone.erase(u);
not_alone.erase(v);
if (p[u] == v || rnd() % 2) {
swap(u, v);
}
swap(d[p[u]], d[p[v]]);
swap(p[u], p[v]);
cycles.emplace_back();
int x = (int)cycles.size() - 1;
auto &old_cycle = cycles[num[u]];
auto &new_cycle = cycles.back();
while (num[u] != x) {
new_cycle.insert(u);
old_cycle.erase(u);
num[u] = x;
u = p[u];
}
if (p[u] != u) {
not_alone.insert(u);
}
if (p[v] != v) {
not_alone.insert(v);
}
};
for (int i = 0; i < M; i++) {
P[i] = Q[i] = 0;
}
for (int i = 1; i < M; i++) {
if (not_alone.empty()) {
return i;
}
if (not_alone.size() == 2) {
int u = *not_alone.begin();
P[i - 1] = u;
Q[i - 1] = p[u];
return i;
}
if (X[i] == Y[i]) {
int u = *not_alone.begin();
P[i - 1] = u;
Q[i - 1] = p[u];
do_swap(u, p[u]);
} else if (num[X[i]] == num[Y[i]]) {
if (not_alone.size() == 2) {
return i + 1;
}
for (int u : not_alone) {
if (p[u] != X[i] && p[u] != Y[i]) {
P[i - 1] = u;
Q[i - 1] = p[u];
do_swap(u, p[u]);
break;
}
}
do_swap(X[i], Y[i]);
} else {
int x = X[i];
int y = Y[i];
if (p[x] == x && p[y] == y) {
int u = *not_alone.begin();
P[i - 1] = u;
Q[i - 1] = p[u];
do_swap(u, p[u]);
cycles[num[x]].insert(y);
cycles[num[y]].erase(y);
num[y] = num[x];
swap(d[p[x]], d[p[y]]);
swap(p[x], p[y]);
not_alone.insert(x);
not_alone.insert(y);
} else {
if (d[y] != y) {
swap(x, y);
}
P[i - 1] = x;
Q[i - 1] = d[x];
do_swap(x, d[x]);
cycles[num[x]].erase(x);
cycles[num[y]].insert(x);
num[x] = num[y];
swap(d[p[x]], d[p[y]]);
swap(p[x], p[y]);
not_alone.insert(x);
not_alone.insert(y);
}
}
}
return 0;
}
详细
Subtask #1:
score: 8
Accepted
Test #1:
score: 8
Accepted
time: 0ms
memory: 3996kb
input:
1 0 1 0 0
output:
0
result:
ok correct
Test #2:
score: 0
Accepted
time: 0ms
memory: 4072kb
input:
2 0 1 4 0 0 0 0 0 0 0 0
output:
0
result:
ok correct
Test #3:
score: 0
Accepted
time: 0ms
memory: 3708kb
input:
2 1 0 4 0 0 0 0 0 0 0 0
output:
1 0 1
result:
ok correct
Test #4:
score: 0
Accepted
time: 0ms
memory: 3664kb
input:
3 1 0 2 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
output:
1 0 1
result:
ok correct
Test #5:
score: 0
Accepted
time: 0ms
memory: 3736kb
input:
4 3 2 0 1 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
output:
3 0 3 0 1 0 2
result:
ok correct
Test #6:
score: 0
Accepted
time: 0ms
memory: 3800kb
input:
5 1 4 2 3 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
output:
2 0 1 0 4
result:
ok correct
Test #7:
score: 0
Accepted
time: 0ms
memory: 4000kb
input:
5 4 2 1 0 3 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
output:
3 0 4 0 3 1 2
result:
ok correct
Subtask #2:
score: 12
Accepted
Test #8:
score: 12
Accepted
time: 0ms
memory: 3712kb
input:
1 0 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
output:
0
result:
ok correct
Test #9:
score: 0
Accepted
time: 0ms
memory: 3668kb
input:
2 0 1 60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
output:
0
result:
ok correct
Test #10:
score: 0
Accepted
time: 0ms
memory: 3864kb
input:
98 82 70 31 12 27 51 84 90 66 8 49 52 74 91 46 7 96 67 63 85 34 50 87 83 58 78 26 39 77 48 2 55 94 25 61 56 53 13 32 86 72 20 37 73 9 93 65 28 18 11 71 59 88 35 76 40 24 36 33 3 17 29 38 5 21 15 79 30 62 92 45 80 64 95 43 75 97 23 16 57 22 60 41 69 0 42 14 10 47 68 19 4 1 6 44 81 54 89 2940 0 0 0 0 ...
output:
93 0 82 0 41 0 20 0 34 0 61 0 29 0 48 0 18 0 63 0 5 0 51 0 59 0 3 0 12 0 74 0 43 0 73 0 95 0 81 0 60 0 17 0 67 0 30 0 2 0 31 0 55 0 40 0 72 0 64 0 21 0 50 0 71 0 80 0 22 0 87 0 10 0 49 0 11 0 52 0 88 0 47 0 28 0 77 0 23 0 83 0 69 0 92 0 1 0 70 0 45 0 93 0 6 0 84 4 27 4 39 4 86 4 14 4 46 4 65 4 15 4 ...
result:
ok correct
Test #11:
score: 0
Accepted
time: 0ms
memory: 3864kb
input:
99 8 14 3 0 98 74 18 10 50 93 49 23 80 2 54 79 90 31 66 38 81 36 42 83 39 7 9 71 59 62 67 4 68 5 70 72 34 95 25 27 45 61 97 48 29 15 46 12 87 22 26 63 77 84 11 85 30 24 40 78 41 1 96 69 94 19 6 65 33 13 52 75 88 82 86 20 92 43 89 47 28 73 35 32 53 60 21 16 37 58 44 76 57 56 17 55 91 51 64 2970 0 0 0...
output:
92 0 8 0 50 0 26 0 9 0 93 0 56 0 30 0 67 0 65 0 19 0 38 0 25 0 7 0 10 0 49 0 22 0 42 0 97 0 51 0 63 0 69 0 13 0 2 0 3 1 14 1 54 1 11 1 23 1 83 1 32 1 68 1 33 1 5 1 74 1 86 1 21 1 36 1 34 1 70 1 52 1 77 1 43 1 48 1 87 1 16 1 90 1 44 1 29 1 62 1 96 1 91 1 76 1 92 1 57 1 24 1 39 1 27 1 71 1 75 1 20 1 8...
result:
ok correct
Test #12:
score: 0
Accepted
time: 0ms
memory: 3864kb
input:
96 12 91 75 59 44 30 52 63 41 13 93 79 82 60 85 78 50 53 57 8 80 67 34 24 87 17 47 33 83 21 81 40 89 49 32 70 26 9 43 7 11 37 94 36 23 28 90 42 35 25 62 56 20 84 55 45 46 22 77 51 0 69 1 31 54 2 3 58 88 76 5 6 65 92 39 66 15 95 10 27 14 86 72 4 68 18 38 19 64 73 71 74 48 29 61 16 2880 0 0 0 0 0 0 0 ...
output:
95 0 12 0 82 0 72 0 65 0 2 0 75 0 66 0 3 0 59 0 51 0 56 0 46 0 90 0 71 0 6 0 52 0 20 0 80 0 14 0 85 0 18 0 57 0 22 0 34 0 32 0 89 0 73 0 92 0 48 0 35 0 70 0 5 0 30 0 81 0 86 0 38 0 43 0 36 0 26 0 47 0 42 0 94 0 61 0 69 0 76 0 15 0 78 0 10 0 93 0 29 0 21 0 67 0 58 0 77 0 95 0 16 0 50 0 62 0 1 0 91 0 ...
result:
ok correct
Subtask #3:
score: 16
Accepted
Test #13:
score: 16
Accepted
time: 0ms
memory: 3788kb
input:
2 0 1 60 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
output:
0
result:
ok correct
Test #14:
score: 0
Accepted
time: 0ms
memory: 3708kb
input:
5 0 4 1 3 2 150 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ...
output:
2 0 4 1 2
result:
ok correct
Test #15:
score: 0
Accepted
time: 1ms
memory: 4044kb
input:
96 7 15 12 95 11 50 20 42 81 29 58 80 56 71 63 66 44 6 64 39 2 22 73 1 24 27 69 28 45 25 60 61 5 94 14 65 9 86 68 32 79 37 3 57 34 35 10 88 76 78 21 93 19 53 84 52 4 33 38 55 62 67 77 41 31 48 91 49 51 43 90 8 87 54 16 17 70 46 85 0 75 92 74 47 36 89 30 13 59 26 40 18 82 83 72 23 2880 0 1 0 1 0 1 0 ...
output:
91 1 23 1 15 0 79 2 12 2 56 2 4 2 11 2 80 2 75 2 17 2 6 2 20 3 95 3 23 3 7 3 42 5 50 5 21 5 22 5 73 5 54 5 84 5 36 5 9 5 29 5 25 5 27 5 28 5 45 5 35 5 65 5 48 5 76 5 70 5 90 5 40 5 79 5 66 5 91 5 18 5 64 5 31 5 61 5 67 5 49 5 78 5 85 5 89 5 26 5 69 5 43 5 57 5 33 5 94 5 72 5 87 5 13 5 71 5 8 5 81 5 ...
result:
ok correct
Test #16:
score: 0
Accepted
time: 0ms
memory: 3788kb
input:
99 28 2 16 95 73 6 30 90 18 46 82 69 59 4 40 49 33 29 66 86 97 56 22 96 38 35 67 15 83 44 36 72 81 41 76 47 34 87 65 9 92 57 0 55 68 5 32 17 61 50 14 19 58 24 98 48 53 60 45 12 39 3 8 74 88 77 13 85 84 42 79 51 94 70 10 25 75 31 62 27 64 1 80 78 21 37 7 63 52 23 71 20 54 26 43 91 89 93 11 2970 0 1 0...
output:
92 0 2 1 81 1 28 0 42 3 95 3 91 3 20 3 97 3 93 3 26 3 67 3 85 3 37 3 87 3 63 3 74 3 10 3 82 3 80 3 64 3 88 3 52 3 58 3 45 3 5 3 6 3 30 3 36 3 34 3 76 3 75 3 25 3 35 3 47 3 17 3 29 3 44 3 68 3 84 3 21 3 56 3 53 3 24 3 38 3 65 3 77 3 31 3 72 3 94 3 43 3 55 3 48 3 61 4 73 4 70 4 79 4 27 4 15 4 49 4 50 ...
result:
ok correct
Test #17:
score: 0
Accepted
time: 0ms
memory: 4072kb
input:
99 52 0 59 91 38 87 65 75 48 11 64 60 95 71 62 79 49 30 47 56 33 16 94 8 78 36 13 68 9 35 74 77 80 24 15 83 28 66 12 51 92 84 43 40 4 46 63 57 17 85 42 25 81 14 50 31 72 34 70 88 67 53 6 37 44 45 96 69 2 86 76 55 3 82 22 5 93 39 26 41 98 7 27 1 20 29 23 19 54 18 61 90 89 32 97 73 10 58 21 2970 0 1 0...
output:
97 1 83 2 59 2 88 2 54 2 50 2 42 2 43 2 40 2 92 2 89 2 18 2 47 2 57 2 34 2 15 2 79 2 41 2 84 2 20 2 33 2 24 2 78 2 26 2 13 2 71 2 55 2 31 2 77 2 39 2 51 2 25 2 36 2 28 2 9 2 11 2 60 2 67 2 69 2 86 2 23 2 8 2 48 2 17 2 30 2 74 2 22 2 94 2 97 2 58 2 70 2 76 2 93 2 32 2 80 2 98 2 21 2 16 2 49 2 85 2 29...
result:
ok correct
Test #18:
score: 0
Accepted
time: 0ms
memory: 3708kb
input:
4 0 1 3 2 120 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 ...
output:
2 2 3 0 0
result:
ok correct
Subtask #4:
score: 0
Wrong Answer
Dependency #2:
100%
Accepted
Dependency #3:
100%
Accepted
Test #19:
score: 18
Accepted
time: 0ms
memory: 3668kb
input:
1 0 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
output:
0
result:
ok correct
Test #20:
score: 0
Accepted
time: 0ms
memory: 3804kb
input:
2 0 1 60 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 0 1 1 0 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 0 0 1 0 1 0 1 0 1 1 0 0 1 1 0 1 0 1 0
output:
0
result:
ok correct
Test #21:
score: -18
Wrong Answer
time: 10ms
memory: 4404kb
input:
481 264 22 307 266 238 227 68 26 13 12 384 162 410 306 374 311 442 38 407 310 280 308 333 146 326 381 367 110 190 33 141 468 153 393 157 415 229 75 276 392 349 348 179 445 317 64 78 20 323 257 292 395 129 259 165 398 151 219 14 116 338 188 243 61 150 84 72 340 155 133 459 464 248 433 124 399 177 62 ...
output:
0
result:
wrong answer the final array is not sorted
Subtask #5:
score: 0
Wrong Answer
Test #28:
score: 20
Accepted
time: 5ms
memory: 4072kb
input:
1800 530 1775 466 953 230 1179 944 752 990 1316 275 1029 158 152 1673 1706 172 115 599 1661 131 699 1112 454 551 1059 291 495 28 67 773 480 839 462 1210 757 879 285 439 3 1429 820 26 1023 942 199 356 625 1705 1421 144 1529 716 7 1485 1027 1599 696 517 1353 456 1389 273 1363 1414 1177 718 41 777 1621...
output:
2147 0 530 1387 1600 201 481 0 288 1047 582 0 1704 768 517 1204 1487 0 346 0 1543 0 941 350 1209 1229 1470 870 1134 1210 34 1470 1508 586 695 1554 415 551 24 1302 970 102 215 0 475 436 1391 0 576 0 965 915 879 975 183 598 504 562 1563 0 1091 0 688 513 609 0 492 407 390 0 1480 1310 1157 0 282 1049 10...
result:
ok correct
Test #29:
score: 0
Accepted
time: 2ms
memory: 4168kb
input:
1950 1718 335 1071 714 1080 1828 1472 410 553 1269 297 401 1021 621 1763 528 205 1231 406 5 715 876 1474 1110 653 862 838 291 1092 549 955 1334 1044 300 1070 720 1877 484 1597 1948 1078 28 87 1193 505 1024 1259 63 852 960 633 1573 713 504 15 820 1852 752 1601 1168 471 1903 499 693 1209 1492 56 908 9...
output:
1946 1313 637 0 1718 0 1717 1675 1625 1107 1194 580 1371 0 688 1302 475 0 1910 0 683 0 969 0 625 1793 502 0 692 0 1932 1894 303 0 1788 1239 791 0 1452 0 1531 0 580 0 1787 0 898 0 794 0 1648 0 551 0 884 0 518 0 595 0 1337 0 1890 0 591 0 1801 1352 1158 0 1364 0 198 0 1444 0 1883 0 1942 0 1464 0 265 0 ...
result:
ok correct
Test #30:
score: -20
Wrong Answer
time: 18ms
memory: 4408kb
input:
1853 452 1299 444 1527 510 1801 34 1178 1589 1782 342 1800 735 761 879 999 1122 1772 236 566 1459 1256 1149 1498 1827 1027 715 1377 6 306 1811 950 500 890 196 1825 1568 1157 943 1422 475 1237 1792 1796 1363 1217 889 968 1439 1116 322 795 1088 1358 1833 96 118 543 1337 207 876 1144 805 215 1433 903 1...
output:
0
result:
wrong answer the final array is not sorted
Subtask #6:
score: 0
Skipped
Dependency #5:
0%