atcoder#ARC126D. [ARC126D] Pure Straight

[ARC126D] Pure Straight

题目描述

N N 項からなる正整数列 A = (A1, A2, , AN) A\ =\ (A_1,\ A_2,\ \ldots,\ A_N) が与えられます。各 Ai A_i 1, 2, , K 1,\ 2,\ \ldots,\ K のいずれかです。

あなたはこの数列に対して、次の操作を何度でも行うことができます:

  • 隣接する 2 2 項を入れ替える。つまり、ij=1 |i-j|=1 となる i, j i,\ j を選び、Ai A_i Aj A_j を入れ替える。

数列 A A が以下の条件を満たすようにするために必要な操作回数の最小値を求めてください。

  • 数列 A A は、連続部分列として (1, 2, , K) (1,\ 2,\ \ldots,\ K) を含む。 つまり、An = 1 A_n\ =\ 1 , An+1 = 2 A_{n+1}\ =\ 2 , \ldots , An+K1 = K A_{n+K-1}\ =\ K が成り立つような NK+1 N-K+1 以下の正整数 n n が存在する。

输入格式

入力は以下の形式で標準入力から与えられます。

N N K K A1 A_1 A2 A_2 \ldots AN A_N

输出格式

数列 A A が条件を満たすようにするために必要な操作回数の最小値を出力してください。

题目大意

给你一个有 NN 个正整数的序列 A=(A1,A2,,AN)A = (A_1,A_2,\dots,A_N),且 AiA_i1,2,1,2,\dotsKK

你可以对这个序列做如下操作若干次。

  • 交换两个相邻的元素,也就是选出 iijj 满足 ij=1|i - j| = 1 并交换 AiA_iAjA_j

找到最小的操作数使 AA 满足如下条件。

  • AA 包含 (1,2,,K)(1,2,\dots,K) 作为一个相接的子序列,也就是对于任意正整数 nn 最大是 NK+1N - K + 1 满足 An=1,An+1=2,,ANK+1=KA_n = 1, A_{n + 1} = 2,\dots,A_{N - K + 1} = K
4 3
3 1 2 1
2
5 5
4 1 5 2 3
5
8 4
4 2 3 2 4 2 1 4
5

提示

制約

  • 2 K 16 2\leq\ K\leq\ 16
  • K  N 200 K\ \leq\ N\leq\ 200
  • Ai A_i 1, 2, , K 1,\ 2,\ \ldots,\ K のいずれかに等しい
  • 数列 A A は、1, 2, , K 1,\ 2,\ \ldots,\ K のそれぞれを少なくともひとつ含む

Sample Explanation 1

例えば次のように操作を行うのが最適です。 - A1 A_1 A2 A_2 を入れ替える。A A (1,3,2,1) (1,3,2,1) へ変化する。 - A2 A_2 A3 A_3 を入れ替える。A A (1,2,3,1) (1,2,3,1) へ変化する。 - A1 = 1 A_1\ =\ 1 , A2 = 2 A_2\ =\ 2 , A3 = 3 A_3\ =\ 3 が成り立ち、条件を満たす。