CSES - Datatähti Open 2021 - Results
Submission details
Task:Sorting
Sender:oleh1421
Submission time:2021-02-01 14:22:58 +0200
Language:C++11
Status:READY
Result:36
Feedback
groupverdictscore
#1ACCEPTED36
#20
Test results
testverdicttimegroup
#1ACCEPTED0.15 s1, 2details
#20.15 s2details
#3ACCEPTED0.15 s1, 2details
#4ACCEPTED0.15 s1, 2details

Compiler report

input/code.cpp: In function 'void dfs(std::vector<int>)':
input/code.cpp:15:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i=0;i+3<v.size();i++){
                  ~~~^~~~~~~~~
input/code.cpp:16:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int j=i+2;j+1<v.size();j++){
                        ~~~^~~~~~~~~
input/code.cpp: In function 'void solve()':
input/code.cpp:33:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if (v.back()==v.size()) v.pop_back();
             ~~~~~~~~^~~~~~~~~~
input/code.cpp:40:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         } else if (v[0]==v.size()){
input/code.cpp:49:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for (int i=0;i<v.size();i++){
                          ~^~~~~~~~~
input/code.cpp...

Code

//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC target("avx")
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N=500100;
#define endl '\n'
map<vector<int>,bool>used;
void dfs(vector<int>v){
    used[v]=true;
//    cout<<used.size()<<endl;
//    for (int i:v) cout<<i<<" ";
//    cout<<endl;
    for (int i=0;i+3<v.size();i++){
        for (int j=i+2;j+1<v.size();j++){
            swap(v[i],v[j]);
            swap(v[i+1],v[j+1]);
            if (!used[v]) dfs(v);
            swap(v[i+1],v[j+1]);
            swap(v[i],v[j]);
        }
    }
}
void solve(){
    int n;cin>>n;
    vector<int>v;
    for (int i=1;i<=n;i++){
        int x;cin>>x;
        v.push_back(x);
    }
    while (v.size()>8){
        if (v.back()==v.size()) v.pop_back();
        else if (v[(int)v.size()-2]){
            swap(v[(int)v.size()-4],v[(int)v.size()-2]);
            swap(v[(int)v.size()-3],v[(int)v.size()-1]);
            swap(v[(int)v.size()-4],v[(int)v.size()-1]);
            swap(v[(int)v.size()-5],v[(int)v.size()-2]);
            v.pop_back();
        } else if (v[0]==v.size()){
            swap(v[0],v[2]);
            swap(v[1],v[3]);
            int pos=2;
            swap(v[pos],v[(int)v.size()-1]);
            swap(v[pos-1],v[(int)v.size()-2]);
            v.pop_back();
        } else {
            int pos=-1;
            for (int i=0;i<v.size();i++){
                if (v[i]==v.size()){
                    pos=i;
                    break;
                }
            }
            swap(v[pos],v[(int)v.size()-1]);
            swap(v[pos-1],v[(int)v.size()-2]);
            v.pop_back();
        }
    }
    if (used[v]) cout<<"YES\n";
    else cout<<"NO\n";

}
int32_t main()
{
    vector<int>v;
    for (int i=1;i<=8;i++){
        v.push_back(i);
        dfs(v);
    }
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int tt;cin>>tt;
    while (tt--){
        solve();
    }
    ///7 2 5 8 1 3 4 6
    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:

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

correct output
YES
NO
YES
NO
YES
...

user output
NO
NO
NO
NO
NO
...

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