제출 #1349560

#제출 시각아이디문제언어결과실행 시간메모리
1349560cpismayilmmdv985Arranging Shoes (IOI19_shoes)C++20
10 / 100
1094 ms1960 KiB
#include "shoes.h"
#include "bits/stdc++.h"
using namespace std;

long long count_swaps(vector<int> A) {
   int64_t N = (int)A.size() >> 1, res = 0;
   auto check = [&](const vector<int> &x) -> bool {
      for (int i = 1; i < (int)x.size(); i++)
         if (!(x[i - 1] < 0 && x[i] > 0 && abs(x[i]) == abs(x[i - 1]))) {
            i++;
            return false;
         }
      return true;
   };
   int idx = 0;
   while (!check(A)) {
      int L = -1, R = -1;
      // for (auto &a : A) cerr << a << ' ';
      // cerr << '\n';
      if (A[idx] < 0)   L = idx;
      else              R = idx;
      for (int i = idx + 1; i < (N << 1); i++) {
         if (A[idx] < 0 && A[i] > 0) {
            L = idx, R = i;
            break;
         } else if (A[idx] > 0 && A[i] < 0) {
            L = i, R = idx;
            break;
         }
      }
      if (L == -1)   break;
      if (A[idx] < 0)   idx += 2;
      else              idx++;
      // cerr << L << ' ' << R << '\n';
      int Lel = A[L], Rel = A[R];
      if (L < R)  res += R - L - 1, A.erase(A.begin() + R), A.insert(A.begin() + L + 1, Rel);
      else        res += L - R, A.erase(A.begin() + L), A.insert(A.begin() + R, Lel);
   }
   return res;
}
#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...