#HK4967. 「POI2015 R2」项链分割 Necklace partition

「POI2015 R2」项链分割 Necklace partition

题目描述

题目译自 XXII Olimpiada Informatyczna — II etap Podział naszyjnika

我们有一条由 nn 个珠子组成的项链,每颗珠子属于 kk 种类型之一。珠子编号为 11nnii 号珠子与 i+1i+1i1i-1 号珠子相邻(若存在),且 11 号和 nn 号珠子也相邻。我们希望用两刀将项链切成两个非空部分,确保每种类型的珠子只出现在其中一部分(即若某部分含类型 jj 的珠子,另一部分不得含类型 jj)。请计算有多少种切割方式,以及两部分长度差的最小值。

输入格式

第一行包含两个整数 n,kn, k (2kn1000000)(2 \leq k \leq n \leq 1000000),分别表示项链长度和珠子类型数。珠子类型编号为 11kk

第二行包含 nn 个整数 r1,r2,,rnr_1, r_2, \ldots, r_n (1rik)(1 \leq r_i \leq k)rir_i 表示 ii 号珠子的类型。保证每种类型至少出现一次。

输出格式

输出一行,包含两个整数,第一个表示可行的切割方式数(保证至少有一种方式),第二个表示两部分长度差的最小值。

9 5
2 5 3 2 2 4 1 1 3

4 3

有四种可行分割:较短部分可包含珠子 (5)(5)(4)(4)(1,1)(1, 1)(4,1,1)(4, 1, 1)。最后一种情况下,长度差为 63=36 - 3 = 3,是最优解。

附加样例

  1. n=10n=10,短项链,仅两种可行分割;
  2. n=1000n=1000,每颗珠子类型不同,所有分割均有效;
  3. n=1000000,k=n/2n=1000000, k=n/2,项链形式为 1,,k,k,,11, \ldots, k, k, \ldots, 1

数据范围与提示

对于 30%30\% 的数据,n1000n \leq 1000