結果

問題 No.1854 Limited Bubble Sort
ユーザー tnakao0123tnakao0123
提出日時 2022-02-27 23:51:51
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 1,321 bytes
コンパイル時間 331 ms
コンパイル使用メモリ 42,880 KB
実行使用メモリ 6,944 KB
最終ジャッジ日時 2024-07-06 02:22:22
合計ジャッジ時間 3,964 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
6,812 KB
testcase_01 WA -
testcase_02 WA -
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
testcase_22 WA -
testcase_23 WA -
testcase_24 WA -
testcase_25 AC 2 ms
6,940 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

/* -*- coding: utf-8 -*-
 *
 * 1854.cc:  No.1854 Limited Bubble Sort - yukicoder
 */

#include<cstdio>
#include<algorithm>
 
using namespace std;

/* constant */

const int MAX_N = 500;
const int MAX_NN = MAX_N * MAX_N;

/* typedef */

/* global variables */

int ps[MAX_N], ops[MAX_NN];

/* subroutines */

void bsort(int l, int r, int &m) {
  for (int i = l; i < r; i++)
    if (ps[i] != i)
      for (int j = r - 1; j > i; j--)
	if (ps[j] == i) {
	  ops[m++] = j - 1;
	  swap(ps[j - 1], ps[j]);
	}
}

/* main */

int main() {
  int tn;
  scanf("%d", &tn);

  while (tn--) {
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", ps + i), ps[i]--;

    int m = 0;
    for (int i = 0; i < n;) {
      while (i < n && ps[i] == i) i++;
      if (i >= n) break;

      int minp = ps[i], maxp = ps[i];
      int j = i + 1;
      while (j < n && ps[j] != j) {
	minp = min(minp, ps[j]);
	maxp = max(maxp, ps[j]);
	j++;
      }

      if (minp != i || maxp != j - 1) {
	m = -1; break;
      }

      bsort(i, j, m);
      i = j;
    }

    printf("%d\n", m);
    if (m >= 0) {
      for (int i = 0; i < m; i++) {
	if (i) putchar(' ');
	printf("%d", ops[i] + 1);
      }
      putchar('\n');
    }

    //for (int i = 0; i < n; i++)
    //printf("%d%c", ps[i], (i + 1 < n) ? ' ' : '\n');
  }

  return 0;
}
0