CSES - Datatähti Open 2021 - Results
Submission details
Task:Sorting
Sender:qpwoeirut
Submission time:2021-01-30 09:23:17 +0200
Language:C++ (C++17)
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
Test results
testverdicttimegroup
#10.01 s1, 2details
#20.01 s2details
#30.01 s1, 2details
#4ACCEPTED0.03 s1, 2details

Code

//sorting.cpp created at 01/29/21 21:00:48
#include <bits/stdc++.h>
using namespace std;
const int MN = 101;
int N;
int A[MN], B[MN];
void solve() {
}
int pack() {
int ret = 0;
for (int i=0; i<N; ++i) {
ret <<= 3;
ret |= B[i];
}
return ret;
}
void unpack(int ret) {
for (int i=N-1; i>=0; --i) {
B[i] = ret & 7;
ret >>= 3;
}
}
short seen[(1 << 24) + 10];
bool ans[1001];
bool brute(const int test) {
copy(A, A+N, B);
for (int i=0; i<N; ++i) {
--B[i];
}
const int start = pack();
if (seen[start] > 0) {
return ans[seen[start]];
}
for (int i=0; i<N; ++i) {
B[i] = i;
}
const int tar = pack();
queue<int> q;
q.push(start);
seen[start] = test;
while (q.size() > 0) {
const int cur = q.front(); q.pop();
if (cur == tar) {
ans[test] = true;
return true;
}
for (int i=0; i+1<N; ++i) {
for (int j=i+2; j+1<N; ++j) {
unpack(cur);
swap(B[i], B[j]);
swap(B[i+1], B[j+1]);
const int nxt = pack();
if (seen[nxt] < test) {
if (seen[nxt] > 0) {
return ans[seen[nxt]];
}
seen[nxt] = test;
q.push(nxt);
}
}
}
}
ans[test] = false;
return false;
}
int main() {
cin.tie(0)->sync_with_stdio(0);
int T;
cin >> T;
for (int t=1; t<=T; ++t) {
cin >> N;
for (int i=0; i<N; ++i) {
cin >> A[i];
}
cout << (brute(t) ? "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
(empty)

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
YES
NO
NO
NO
YES
...
Truncated

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
...
Truncated