Submission details
Task:Pair sort
Sender:aalto25d_002
Submission time:2025-09-24 17:13:31 +0300
Language:C++ (C++17)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.00 sdetails
#3ACCEPTED0.00 sdetails
#4ACCEPTED0.00 sdetails
#5ACCEPTED0.00 sdetails
#6ACCEPTED0.00 sdetails
#7ACCEPTED0.00 sdetails
#8ACCEPTED0.00 sdetails
#9ACCEPTED0.01 sdetails
#10ACCEPTED0.01 sdetails
#11ACCEPTED0.01 sdetails
#12ACCEPTED0.01 sdetails
#13ACCEPTED0.01 sdetails
#14ACCEPTED0.01 sdetails

Code

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <set>

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    // freopen("input.txt", "r", stdin); // TODO: REMOVE THIS YOU STUPID ****

    int n;
    cin >> n;
    int m = 2 * n;
    vector<int> a(m);
    for (int i = 0; i < m; ++i) cin >> a[i];

    vector< set<int> > pos(n + 1);
    for (int i = 0; i < m; ++i) pos[a[i]].insert(i);

    vector<pair<int,int>> swaps;
    for (int i = 0; i < m; i += 2) {
        int x = a[i];
        pos[x].erase(i);
        int j = *pos[x].begin();
        if (j == i + 1) {
            // already paired
            pos[x].erase(j);
            continue;
        }
        // swap a[i+1] and a[j]
        int y = a[i+1];
        pos[y].erase(i+1);
        pos[y].insert(j);
        pos[x].erase(j);
        swap(a[i+1], a[j]);
        swaps.emplace_back(i+2, j+1);
    }

    cout << swaps.size() << endl;
    for (auto &p : swaps) cout << p.first << " " << p.second << endl;
    return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
5
3 2 4 5 1 3 2 1 4 5 

correct output
3
2 6
4 9
6 8

user output
3
2 6
4 9
6 8

Test 2

Verdict: ACCEPTED

input
5
3 2 4 5 1 3 2 1 4 5 

correct output
3
2 6
4 9
6 8

user output
3
2 6
4 9
6 8

Test 3

Verdict: ACCEPTED

input
10
3 6 6 8 8 9 9 1 4 5 2 4 10 2 1...

correct output
9
2 17
4 17
6 17
8 17
...

user output
9
2 17
4 17
6 17
8 17
...

Test 4

Verdict: ACCEPTED

input
10
3 6 6 8 8 9 9 1 4 5 2 4 10 2 1...

correct output
9
2 17
4 17
6 17
8 17
...

user output
9
2 17
4 17
6 17
8 17
...

Test 5

Verdict: ACCEPTED

input
50
47 26 6 35 13 18 9 19 14 50 34...

correct output
48
2 87
4 78
6 71
8 55
...

user output
48
2 87
4 78
6 71
8 55
...
Truncated

Test 6

Verdict: ACCEPTED

input
50
47 26 6 35 13 18 9 19 14 50 34...

correct output
48
2 87
4 78
6 71
8 55
...

user output
48
2 87
4 78
6 71
8 55
...
Truncated

Test 7

Verdict: ACCEPTED

input
100
56 26 6 35 60 72 9 55 83 51 58...

correct output
97
2 77
4 108
6 141
8 55
...

user output
97
2 77
4 108
6 141
8 55
...
Truncated

Test 8

Verdict: ACCEPTED

input
100
56 26 6 35 60 72 9 55 83 51 58...

correct output
97
2 77
4 108
6 141
8 55
...

user output
97
2 77
4 108
6 141
8 55
...
Truncated

Test 9

Verdict: ACCEPTED

input
500
56 146 351 35 281 235 354 449 ...

correct output
497
2 758
4 820
6 125
8 243
...

user output
497
2 758
4 820
6 125
8 243
...
Truncated

Test 10

Verdict: ACCEPTED

input
500
56 146 351 35 281 235 354 449 ...

correct output
497
2 758
4 820
6 125
8 243
...

user output
497
2 758
4 820
6 125
8 243
...
Truncated

Test 11

Verdict: ACCEPTED

input
1000
603 596 351 885 530 235 354 56...

correct output
993
2 256
4 1534
6 816
8 1057
...

user output
993
2 256
4 1534
6 816
8 1057
...
Truncated

Test 12

Verdict: ACCEPTED

input
1000
603 596 351 885 530 235 354 56...

correct output
993
2 256
4 1534
6 816
8 1057
...

user output
993
2 256
4 1534
6 816
8 1057
...
Truncated

Test 13

Verdict: ACCEPTED

input
5000
1594 596 1797 3776 1201 235 35...

correct output
4993
2 1548
4 9062
6 6397
8 8296
...

user output
4993
2 1548
4 9062
6 6397
8 8296
...
Truncated

Test 14

Verdict: ACCEPTED

input
5000
1594 596 1797 3776 1201 235 35...

correct output
4993
2 1548
4 9062
6 6397
8 8296
...

user output
4993
2 1548
4 9062
6 6397
8 8296
...
Truncated