#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |