CSES - Datatähti Open 2021 - Results
Submission details
Task:Sorting
Sender:apostoldaniel854
Submission time:2021-01-29 22:18:47 +0200
Language:C++17
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED36
#2ACCEPTED64
Test results
testverdicttimegroup
#1ACCEPTED0.01 s1, 2details
#2ACCEPTED0.02 s2details
#3ACCEPTED0.25 s1, 2details
#4ACCEPTED0.01 s1, 2details

Code

#include <bits/stdc++.h>

using namespace std;

using ll = long long;
#define pb push_back

const int MAX_N = 100;
int p[1 + MAX_N];

map <vector <int>, bool> seen;
bool found;
void bkt (vector <int> v) {
    if (found) return;
    if (seen[v])
        return;
    seen[v] = true;
    int n = v.size ();
    bool good = true;
    for (int i = 0; i < n; i++)
        if (v[i] != i + 1)
            good = false;
    if (good)
        found = true;
    if (found)
        return;
    for (int i = 0; i + 1 < n; i++)
        for (int j = i + 2; j + 1 < n; j++) {
            vector <int> new_v = v;
            swap (new_v[i], new_v[j]);
            swap (new_v[i + 1], new_v[j + 1]);
            bkt (new_v);
        }
}

void solveTest () {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> p[i];
    if (n <= 6) {
        vector <int> v;
        seen.clear ();
        found = false;
        for (int i = 1; i <= n; i++)
            v.pb (p[i]);
        bkt (v);
        if (found)
            cout << "YES\n";
        else
            cout << "NO\n";
    }
    else {
        int inv = 0;
        for (int i = 1; i <= n; i++)
            for (int j = i + 1; j <= n; j++)
                if (p[i] > p[j])
                    inv++;
        if (inv & 1)
            cout << "NO\n";
        else
            cout << "YES\n";
    }
}

int main () {
    int t;
    cin >> t;
    while (t--)
        solveTest ();
    return 0;
}

Test details

Test 1

Group: 1, 2

Verdict: ACCEPTED

input
153
1
1
2
1 2
...

correct output
YES
YES
NO
NO
NO
...

user output
YES
YES
NO
NO
NO
...

Test 2

Group: 2

Verdict: ACCEPTED

input
1000
59
35 29 32 50 11 15 9 21 19 45 2...

correct output
YES
NO
YES
NO
YES
...

user output
YES
NO
YES
NO
YES
...

Test 3

Group: 1, 2

Verdict: ACCEPTED

input
720
6
1 6 4 5 2 3
6
6 3 2 1 5 4
...

correct output
YES
NO
NO
NO
YES
...

user output
YES
NO
NO
NO
YES
...

Test 4

Group: 1, 2

Verdict: ACCEPTED

input
1000
8
7 4 2 8 6 3 5 1
8
3 8 2 7 5 4 6 1
...

correct output
NO
NO
YES
NO
YES
...

user output
NO
NO
YES
NO
YES
...