luogu#P6764. [APIO2020] 粉刷墙壁

[APIO2020] 粉刷墙壁

题目背景

由于官方数据包过大,本题仅评测部分数据。

本题仅支持 C++ 系列语言,提交时不需要包含 paint.h 头文件。

如果交互库存在其他问题,请私信 mrsrz。

题目描述

距离上一次 Pak Dengklek 在他的家中粉刷墙壁已经过了一段时间,所以他想重新粉刷一次。他家的墙壁由 NN 段组成,它们从 00N1N - 1 编号。本题中我们假设存在 KK 种不同的颜色,颜色用从 00K1K - 1 的整数表示(例如,红色用 00 表示, 蓝色用 11 表示,以此类推)。Pak Dengklek 希望用第 C[i]C[i] 种颜色来粉刷第 ii 段的墙壁。

为了粉刷墙壁,Pak Dengklek 雇用了一家有 MM 个承包商的承包商公司,承包商从 00M1M - 1 编号。对 Pak Dengklek 来说不幸的是,承包商只愿意粉刷他们自己喜欢的 颜色。具体来说,第 jj 个承包商喜欢 A[j]A[j] 种颜色,并且只想用下列颜色来粉刷墙壁:第 B[j][0]B[j][0] 种颜色,第 B[j][1]B[j][1] 种颜色,\dots,或第 B[j][A[j]1]B[j][A[j] − 1] 种颜色。

Pak Dengklek 可以给承包商公司提出一些要求。在单个要求中,Pak Dengklek 将给出两个参数 xxyy, 其中 0x<M0 \leq x < M0yNM0 \leq y \leq N - M。承包商公司将会指派第 ((x+l)modM)((x + l) \mod M) 个承包商粉刷第 (y+l)(y + l) 段墙壁,其中 0l<M0 \leq l < M。如果存在一个 ll 使 得第 ((x+l)modM)((x + l) \mod M) 个承包商不喜欢第 C[y+l]C[y + l] 种颜色,那么该要求将无效。

Pak Dengklek 需要为每个要求付费,因此他想知道为了使墙壁中每个段都能用自己预期的颜色粉刷,他至少要提出多少个要求,或是确认他的预期无法达到。每一段墙壁可以被粉刷多次,但必须保证每次粉刷的颜色都是 Pak Dengklek 所预期的。

你必须实现 minimumInstructions 函数:

  • minimumInstructions(N, M, K, C, A, B) - 该函数将被评测库恰好调用一次。
    • NN:一个整数表示墙壁的段数。
    • MM:一个整数表示承包商的数量。
    • KK:一个整数表示颜色的种数。
    • CC:一个长度为 NN 的整数序列,表示每段墙壁预期的颜色。
    • AA:一个长度为 MM 的整数序列,表示承包商喜欢的颜色数。
    • BB:一个长度为 MM 的每个元素为序列的序列,表示承包商喜欢的具体颜色。
    • 该函数必须返回一个整数,表示 Pak Dengklek 为了让墙壁按预期粉刷所需要提出的最小要求数;若预期无法达到则返回 1-1

输入格式

样例评测库将读入以下格式的数据:

N M K
C[0] C[1] ... C[N-1]
A[0] B[0][0] B[0][1] ... B[0][A[0]-1]
A[1] B[1][0] B[1][1] ... B[1][A[1]-1]
.
.
.
A[M-1] B[M-1][0] B[M-1][1] ... B[M-1][A[M-1]-1]

输出格式

样例评测库将输出函数 minimumInstructions 的返回值

8 3 5
3 3 1 3 4 4 2 2
3 0 1 2
2 2 3
2 3 4

3

5 4 4
1 0 1 2 2
2 0 1
1 1
1 2
1 3

-1

提示

在第一个样例中, N=8N = 8M=3M = 3K=5K = 5C=[3,3,1,3,4,4,2,2]C = [3, 3, 1, 3, 4, 4, 2, 2]A=[3,2,2]A = [3, 2, 2]B=[[0,1,2],[2,3],[3,4]]B = [[0, 1, 2], [2, 3], [3, 4]]。Pak Dengklek 可以提出下列的要求。

  1. x=1x = 1y=0y = 0。这是一个有效的要求,第一个承包商可以粉刷第零段墙壁,第二个承包商可以粉刷第一段墙壁,第零个承包商可以粉刷第二段墙壁。
  2. x=0x = 0y=2y = 2。 这是一个有效的要求,第零个承包商可以粉刷第二段墙壁,第一个承包商可以粉刷第三段墙壁,第二个承包商可以粉刷第四段墙壁。
  3. x=2x = 2y=5y = 5。 这是一个有效的要求,第二个承包商可以粉刷第五段墙壁,第零个承包商可以粉刷第六段墙壁,第一个承包商可以粉刷第七段墙壁。

容易看出 Pak Dengklek 不能用少于 33 个的要求来达到预期,因此 minimumInstructions(8, 3, 5, [3, 3, 1, 3, 4, 4, 2, 2], [3, 2, 2], [[0, 1, 2], [2, 3], [3, 4]]) 应该返回 33

在第二个样例中,N=5N = 5M=4M = 4K=4K = 4C=[1,0,1,2,2]C = [1, 0, 1, 2, 2]A=[2,1,1,1]A = [2, 1, 1, 1]B=[[0,1],[1],[2],[3]]B = [[0, 1], [1], [2], [3]]。由于第三个承包商只喜欢第 33 种颜色但没有任何一段墙壁能被该颜色粉刷,Pak Dengklek 无法给出任何有效指令。因此minimumInstructions(5, 4, 4,[1, 0, 1, 2, 2], [2, 1, 1, 1], [[0, 1], [1], [2], [3]]) 应该返回 1-1

对于 0k<K0 \leq k < K, 令 f(k)f(k) 表示喜欢第 kk 种颜色的承包商数量。

【条件限制】

  • 1N1000001 \leq N \leq 100 000
  • 1Mmin(N,50000)1 \leq M \leq \min(N, 50 000)
  • 1K1000001 \leq K \leq 100 000
  • 0C[i]<K0 \leq C[i] < K
  • 1A[j]K1 \leq A[j] \leq K
  • $0 \leq B[j][0] < B[j][1] < \dots < B[j][A[j] − 1] < K$。
  • f(k)2400000\sum f(k)^2 \leq 400 000

【子任务 111212 分)】

  • f(k)1f(k) \leq 1

【子任务 221515 分)】

  • N500N \leq 500
  • Mmin(N,200)M \leq \min(N, 200)
  • f(k)21000\sum f(k)^2 \leq 1 000

【子任务 331313 分)】

  • N500N \leq 500
  • Mmin(N,200)M \leq \min(N, 200)

【子任务 442323 分)】

  • N20000N \leq 20 000
  • Mmin(N,2000)M \leq \min(N, 2 000)

【子任务 553737 分)】

  • 无附加限制。