Task: | Sorting |
Sender: | qpwoeirut |
Submission time: | 2021-01-30 09:37:35 +0200 |
Language: | C++ (C++17) |
Status: | READY |
Result: | 0 |
group | verdict | score |
---|---|---|
#1 | TIME LIMIT EXCEEDED | 0 |
#2 | RUNTIME ERROR | 0 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | ACCEPTED | 0.01 s | 1, 2 | details |
#2 | RUNTIME ERROR | 0.01 s | 2 | details |
#3 | ACCEPTED | 0.03 s | 1, 2 | details |
#4 | TIME LIMIT EXCEEDED | -- | 1, 2 | details |
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]; } assert(ret < (1 << 27)); return ret; } void unpack(int ret) { for (int i=N; i>=0; --i) { B[i] = ret & 7; ret >>= 3; } } short seen[1 << 27]; bool ans[1001]; bool brute(const int test) { copy(A, A+N, B); for (int i=0; i<N; ++i) { --B[i]; } B[N] = N-1; 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() { //N = 8; //for (int i=0; i<8; ++i) { // B[i] = 7 - i; //} //B[8] = 7; //cout << pack() << endl; 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: ACCEPTED
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: RUNTIME ERROR
input |
---|
1000 59 35 29 32 50 11 15 9 21 19 45 2... |
correct output |
---|
YES NO YES NO YES ... |
user output |
---|
(empty) |
Error:
code: input/code.cpp:22: int pack(): Assertion `ret < (1 << 27)' failed.
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 ... Truncated |
Test 4
Group: 1, 2
Verdict: TIME LIMIT EXCEEDED
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 |
---|
(empty) |