Submission #298803

#TimeUsernameProblemLanguageResultExecution timeMemory
298803square1001Arranging Shoes (IOI19_shoes)C++14
30 / 100
59 ms3064 KiB
#include "shoes.h" #include <vector> #include <algorithm> using namespace std; const int inf = 1012345678; int count_inversions(int n, vector<int> a, vector<int> b) { vector<int> aprecnt(n); for(int i = 0; i < n; ++i) { for(int j = 0; j < i; ++j) { if(a[j] == a[i]) ++aprecnt[i]; } } vector<int> perm(n); for(int i = 0; i < n; ++i) { int bprecnt = 0; for(int j = 0; j < i; ++j) { if(b[j] == b[i]) ++bprecnt; } for(int j = 0; j < n; ++j) { if(a[j] == b[i] && aprecnt[j] == bprecnt) { perm[i] = j; } } } int ans = 0; for(int i = 0; i < n; ++i) { for(int j = i + 1; j < n; ++j) { if(perm[i] > perm[j]) { ++ans; } } } return ans; } long long count_swaps(std::vector<int> s) { int N = s.size() / 2; if(N <= 8) { // subtask 1, 2 vector<int> sizes; for(int i = 0; i < 2 * N; ++i) { if(s[i] > 0) { sizes.push_back(s[i]); } } vector<int> perm(N); for(int i = 0; i < N; ++i) perm[i] = i; int ans = inf; do { vector<int> seq(2 * N); for(int i = 0; i < N; ++i) { seq[i * 2] = -sizes[perm[i]]; seq[i * 2 + 1] = sizes[perm[i]]; } int res = count_inversions(2 * N, seq, s); ans = min(ans, res); } while(next_permutation(perm.begin(), perm.end())); return ans; } return -1; }
#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...