Submission #34615935


Source Code Expand

// Author: Ruhan Habib (ruhanhabib39@gmail.com)

#include <iostream>
#include <algorithm>
#include <vector>
#include <cassert>
using namespace std;

vector<pair<char, int>> res;

void even_swaps (vector<int>& P, int i, int j) {
   int dx = i < j ? +2 : -2;
   for (; i != j; i += dx) {
      swap(P[i], P[i+dx]);
      res.emplace_back('B', min(i, i + dx));
   }
}

void odd_swaps (vector<int>& P, int i, int j) {
   int dx = i < j ? +1 : -1;
   for (; i != j; i += dx) {
      swap(P[i], P[i+dx]);
      res.emplace_back('A', min(i, i + dx));
   }
}

void work (int N, vector<int>& P) {
   vector<int> pos(N);
   for (int k = 0; k < N; k++) {
      pos[P[k]] = k;
   }

   int j = 0;
   while (j < N && (pos[j] - j) % 2 == 0) j++;

   if (j == N) {
      j = 0;
      while (j < N && pos[j] == j) j++;
      
      if (j == N) {
         assert (is_sorted(P.begin(), P.end()));
         return;
      }
   }


   int i = pos[j]; // i -> j

   if ((i - j) % 2 == 0) {
      even_swaps(P, i, j);
   } else {
      int y = (i & 1) ^ 1;
      while (y < N && (P[y] - y) % 2 == 0) y += 2;

      assert (y < N);

      int x = y == N - 1 ? y - 1 : y + 1;

      even_swaps(P, i, x);
      odd_swaps(P, x, y);
      even_swaps(P, y, j);
   }

   assert (res.size() <= 100 * 1000);

   work(N, P);
}

int main() {
   ios_base::sync_with_stdio(false);
   cin.tie(0);

   int N; cin >> N;
   vector<int> P(N);
   for (int& x : P) {
      cin >> x;
      x--;
   }

   work(N, P);

   assert (res.size() <= 100 * 1000);

   cout << res.size() << "\n";

   for (auto [c, i] : res) {
      cout << c << " " << i+1 << "\n";
   }
}

Submission Info

Submission Time
Task B - Swap to Sort
User ruhanhabib39
Language C++ (GCC 9.2.1)
Score 500
Code Size 1710 Byte
Status AC
Exec Time 14 ms
Memory 4500 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 3
AC × 54
Set Name Test Cases
Sample sample_00.txt, sample_01.txt, sample_02.txt
All case_00.txt, case_01.txt, case_02.txt, case_03.txt, case_04.txt, case_05.txt, case_06.txt, case_07.txt, case_08.txt, case_09.txt, case_10.txt, case_11.txt, case_12.txt, case_13.txt, case_14.txt, case_15.txt, case_16.txt, case_17.txt, case_18.txt, case_19.txt, case_20.txt, case_21.txt, case_22.txt, case_23.txt, case_24.txt, case_25.txt, case_26.txt, case_27.txt, case_28.txt, case_29.txt, case_30.txt, case_31.txt, case_32.txt, case_33.txt, case_34.txt, case_35.txt, case_36.txt, case_37.txt, case_38.txt, case_39.txt, case_40.txt, case_41.txt, case_42.txt, case_43.txt, case_44.txt, case_45.txt, case_46.txt, case_47.txt, case_48.txt, case_49.txt, case_50.txt, sample_00.txt, sample_01.txt, sample_02.txt
Case Name Status Exec Time Memory
case_00.txt AC 8 ms 3540 KiB
case_01.txt AC 2 ms 3560 KiB
case_02.txt AC 3 ms 3432 KiB
case_03.txt AC 3 ms 3588 KiB
case_04.txt AC 3 ms 3524 KiB
case_05.txt AC 9 ms 3932 KiB
case_06.txt AC 8 ms 3960 KiB
case_07.txt AC 2 ms 3456 KiB
case_08.txt AC 4 ms 3728 KiB
case_09.txt AC 2 ms 3524 KiB
case_10.txt AC 3 ms 3556 KiB
case_11.txt AC 4 ms 3856 KiB
case_12.txt AC 3 ms 3588 KiB
case_13.txt AC 2 ms 3572 KiB
case_14.txt AC 9 ms 4072 KiB
case_15.txt AC 2 ms 3608 KiB
case_16.txt AC 8 ms 3904 KiB
case_17.txt AC 4 ms 3860 KiB
case_18.txt AC 3 ms 3656 KiB
case_19.txt AC 2 ms 3588 KiB
case_20.txt AC 3 ms 3552 KiB
case_21.txt AC 3 ms 3612 KiB
case_22.txt AC 9 ms 3828 KiB
case_23.txt AC 5 ms 3664 KiB
case_24.txt AC 7 ms 3948 KiB
case_25.txt AC 9 ms 4008 KiB
case_26.txt AC 10 ms 4244 KiB
case_27.txt AC 11 ms 4292 KiB
case_28.txt AC 12 ms 4072 KiB
case_29.txt AC 9 ms 4232 KiB
case_30.txt AC 10 ms 4036 KiB
case_31.txt AC 9 ms 4232 KiB
case_32.txt AC 13 ms 4240 KiB
case_33.txt AC 13 ms 4292 KiB
case_34.txt AC 11 ms 4072 KiB
case_35.txt AC 10 ms 4192 KiB
case_36.txt AC 9 ms 4056 KiB
case_37.txt AC 11 ms 4184 KiB
case_38.txt AC 10 ms 4212 KiB
case_39.txt AC 9 ms 4208 KiB
case_40.txt AC 10 ms 4092 KiB
case_41.txt AC 10 ms 4112 KiB
case_42.txt AC 11 ms 4096 KiB
case_43.txt AC 10 ms 4176 KiB
case_44.txt AC 10 ms 4140 KiB
case_45.txt AC 4 ms 3592 KiB
case_46.txt AC 14 ms 4132 KiB
case_47.txt AC 14 ms 4500 KiB
case_48.txt AC 5 ms 3576 KiB
case_49.txt AC 13 ms 4016 KiB
case_50.txt AC 13 ms 3976 KiB
sample_00.txt AC 3 ms 3488 KiB
sample_01.txt AC 2 ms 3596 KiB
sample_02.txt AC 2 ms 3488 KiB