이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "shoes.h"
using namespace std;
#define sz(x) (int)x.size()
#define all(x) x.begin(),x.end()
const long long inf = 1e18 + 7;
long long count_swaps(vector<int> s) {
int n = sz(s) / 2;
long long ans = inf;
// cout << "n : " << n << endl;
// for(auto itr : s)cout << itr << " ";cout << endl;
if(n == 1){// 10 pts - n = 1
ans = 0;
if(s[0] > 0)ans++;
return ans;
}
if(n <= 8){// 20 pts - n <= 8
vector < int > shoes;
for(auto itr : s)if(itr > 0)shoes.push_back(itr);
// cout << "shoes : ";for(auto itr : shoes)cout << itr << " ";cout << endl;
vector < int > perm(n);
iota(all(perm) , 0);
do{
vector < int > tmp = s;
long long locans = 0;
vector < int > news;
for(auto itr : perm){
news.push_back(-shoes[itr]);
news.push_back(shoes[itr]);
}
for(int i = 0;i<2*n;i++){
int cur = i;
while(tmp[cur] != news[i])cur++;
assert(cur == (2*n));
locans += cur - i;
int tmp_val = tmp[i];
for(int j = i;j<cur;j++){
tmp[j] = tmp[j+1];
}
tmp[cur] = tmp_val;
}
// cout << "news : ";for(auto itr : news)cout << itr << " ";cout << endl;
// cout << "locans : " << locans << endl;
ans = min(ans , locans);
} while(next_permutation(all(perm)));
return ans;
}
return 10;
// set < int > ste;
// for(auto itr : s){
// ste.insert(abs(itr));
// }
// if(sz(ste) == 1){// 20 pts - all shoe sizes are same
// }
// else{// 15 pts - first n are left , rest are right and i = i+n
// }
}
# | 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... |