CSES - Datatähti Open 2021 - Results
Submission details
Task:Sorting
Sender:gilgamesh
Submission time:2021-01-31 01:07:25 +0200
Language:C++ (C++11)
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
Test results
testverdicttimegroup
#10.01 s1, 2details
#20.26 s2details
#30.01 s1, 2details
#40.01 s1, 2details

Code

#include <bits/stdc++.h>
using namespace std;
 
#define int long long
#define all(x) (x).begin(),(x).end()
#define pb push_back

signed main(){
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int t; cin >> t;
  while(t--){
    int n; cin >> n;
    int a[n];
    for(int i = 0; i < n; ++i) {
      cin >> a[i];
    }
    if(n <= 3) {
      bool ok = 1;
      for(int i = 0; i < n; ++i) {
        ok &= a[i] == i + 1;
      }
      cout << (ok ? "YES\n" : "NO\n");
      continue;
    }
    if(n == 4) {
      array<int, 4> last = {a[0], a[1], a[2], a[3]};
      vector<array<int, 4>> poss;
      poss.pb({1, 2, 3, 4});
      poss.pb({3, 4, 1, 2});
      bool ok = 0;
      for(auto i : poss) {
        ok |= last == i;
      }
      cout << (ok ? "YES\n" : "NO\n");
      continue;
    }
    int ind = 0, sz = n;
    while(sz > 4) {
      int id = 0;
      if(a[n - 1] == 1) {
        swap(a[n - 1], a[n - 3]);
        swap(a[n - 2], a[n - 4]);
      } else if(a[ind + 1] == 1) {
        swap(a[ind + 1], a[ind + 3]);
        swap(a[ind + 2], a[ind + 4]);
      }
      for(int i = ind; i < n; ++i) {
        if(a[i] == 1) {
          id = i;
          break;
        }
      }
      if(id != ind) {
        swap(a[id], a[ind]);
        swap(a[id + 1], a[ind + 1]);
      }
      for(int i = 0; i < n; ++i) {
        cout << a[i] << " ";
      }
      cout << "\n";
      --sz;
      for(int i = ind + 1; i < n; ++i) {
        --a[i];
      }
      ++ind;
    }
    array<int, 4> last = {a[n - 4], a[n - 3], a[n - 2], a[n - 1]};
    vector<array<int, 4>> poss;
    poss.pb({1, 2, 3, 4});
    poss.pb({3, 4, 1, 2});
    poss.pb({4, 3, 2, 1});
    poss.pb({2, 1, 4, 3});
    poss.pb({2, 3, 1, 4});
    poss.pb({1, 4, 2, 3});
    bool ok = 0;
    for(auto i : poss) {
      ok |= last == i;
    }
    cout << (ok ? "YES\n" : "NO\n");
  }
}

Test details

Test 1

Group: 1, 2

Verdict:

input
153
1
1
2
1 2
...

correct output
YES
YES
NO
NO
NO
...

user output
YES
YES
NO
NO
NO
...
Truncated

Test 2

Group: 2

Verdict:

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

correct output
YES
NO
YES
NO
YES
...

user output
1 27 32 50 11 15 9 21 19 45 24...
Truncated

Test 3

Group: 1, 2

Verdict:

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
1 6 4 5 2 3 
1 1 2 4 5 3 
NO
1 5 2 6 3 4 
1 1 5 3 4 2 
...
Truncated

Test 4

Group: 1, 2

Verdict:

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
1 6 2 8 5 7 4 3 
1 1 7 6 5 4 3 2 
1 1 1 4 2 6 5 3 
1 1 1 1 5 2 3 4 
NO
...
Truncated