Submission #1242590

#TimeUsernameProblemLanguageResultExecution timeMemory
1242590rdwabdellahArranging Shoes (IOI19_shoes)C++20
10 / 100
981 ms1114112 KiB
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

bool check(vector<int> S){
    int n = (int)S.size();
    for (int i = 0; i < n; ++i){
        if(i%2==0 && abs(S[i])!=abs(S[i+1])) return 0;
        if(i%2==0 && S[i]>0) return 0;
        if(i%2==1 && S[i]<0) return 0;
    }
    return 1;
}

ll bfs(vector<int> S){
    if(check(S)){
            return 0;
    } 
    queue<vector<int>> q;
    int n = (int)S.size();
    map<vector<int>, bool> mp;
    map<vector<int>, ll> dist;
    q.push(S);
    while(q.size()){
        vector<int> cur;
        for(auto &i : q.back()) cur.push_back(i);
        mp[cur]=true;
        q.pop();
        
        for (int i = 0; i < n-1; ++i){
            vector<int> vec;
            for(auto &i : cur) vec.push_back(i);
            vec[i]=cur[i+1]; vec[i+1]=cur[i];
            if(mp[vec]) continue;
            dist[vec] = dist[cur]+1;
            if(check(vec)){
                //for(auto &i : vec) cout << i << ' ';
                //cout << '\n';
                return dist[vec];
            } 
            if(dist[vec]>40400) continue;
            q.push(vec);
        }
        
    }
    return 0;
}

ll count_swaps(vector<int> S){
    ll ans = bfs(S);
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...