#P12969. [CCO 2025] Restaurant Recommendation Rescue

    ID: 14839 远端评测题 2000ms 2048MiB 尝试: 0 已通过: 0 显示难度省选/NOI− 上传者: 标签>线段树2025CCO(加拿大)

[CCO 2025] Restaurant Recommendation Rescue

题目描述

一位有抱负的音乐家 K 非常喜欢吃涮涮锅!最近,她按照以下算法光顾了编号为 1,2,…,N1, 2, \ldots, N 的 NN 家涮涮锅餐厅:

  1. K 维护一个有序的推荐列表,初始时仅包含餐厅 1。
  2. 在第 ii 天,她访问列表中下一个被推荐的餐厅,该餐厅会向她推荐餐厅集合 Ri={ri,1,…,ri,li}R_i = \{r_{i,1}, \ldots, r_{i,l_i}\}。
  3. K 将 RiR_i 追加到她的待访问餐厅列表中。
  4. K 重复步骤 2-4,直到没有更多推荐餐厅为止。
  5. K 记录数组 A0,…,AN−1A_0, \ldots, A_{N-1},其中 AiA_i 表示第 (i+1)(i+1) 天她被推荐的餐厅数量,即 Ai=∣Ri+1∣A_i = |R_{i+1}|。

题目保证 ⋃i=1NRi={2,…,N}\bigcup_{i=1}^{N} R_i = \{2, \ldots, N\} 且 Ri∩Rj=∅R_i \cap R_j = \emptyset(i≠ji \neq j),即除了第一家餐厅外,每家餐厅恰好被另一家餐厅推荐一次。

当 K 完成列表后,她的捣蛋朋友 H 决定捉弄她!H 将数组 A0,…,AN−1A_0, \ldots, A_{N-1} 替换为另一个数组 B0,…,BN−1B_0, \ldots, B_{N-1}!K 认为这个新数组 BiB_i 可能是她的数组的循环移位,因此她请你找出所有可能的 0≤k<N0 \leq k < N,使得对于所有 0≤i<N0 \leq i < N 和任意合法的算法输出 A0,…,AN−1A_0, \ldots, A_{N-1},满足 Ai=B(i+k) mod NA_i = B_{(i+k) \bmod N}。

此外,K 还会执行 QQ 次操作,其中第 ii 次操作会交换 BxiB_{x_i} 和 ByiB_{y_i},并要求你对新数组执行相同的计算。你能帮 K 识破朋友的恶作剧吗?

输入格式

第一行输入包含两个整数 NN(1≤N≤500 0001 \leq N \leq 500\,000)和 QQ(0≤Q≤300 0000 \leq Q \leq 300\,000)。

第二行输入包含 NN 个以空格分隔的非负整数 B0,B1,…,BN−1B_0, B_1, \ldots, B_{N-1}(0≤Bi<N0 \leq B_i < N),表示初始序列。

接下来的 QQ 行每行包含两个整数 xix_i 和 yiy_i(0≤xi,yi<N0 \leq x_i, y_i < N 且 xi≠yix_i \neq y_i),表示交换 BxiB_{x_i} 和 ByiB_{y_i}。

输出格式

对于每个 Q+1Q + 1 个数组(包括初始数组 B0,…,BN−1B_0, \ldots, B_{N-1}),设 S={k1,…,km}S = \{k_1, \ldots, k_m\} 表示所有满足条件的整数 0≤kj<N0 \leq k_j < N 的集合,其中存在一个合法的算法输出 A0,…,AN−1A_0, \ldots, A_{N-1},使得对于所有 0≤i<N0 \leq i < N 有 Ai=B(i+kj) mod NA_i = B_{(i + k_j) \bmod N}。在一行中输出两个整数 mm 和 ∑i=1mki(mod998 244 353)\sum_{i=1}^{m} k_i \pmod{998\,244\,353},以空格分隔。

特别地,如果 S=∅S = \emptyset,则输出 0 0。

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

提示

样例 1 解释

数组 AA 为 [1,1,2,0,0][1, 1, 2, 0, 0];可以证明这是唯一对应 B=[1,2,0,0,1]B = [1, 2, 0, 0, 1] 的合法算法输出。一种可能的算法输入如下:

$\begin{aligned} R_1 &= \{2\} \\ R_2 &= \{3\} \\ R_3 &= \{4, 5\} \\ R_4 &= \varnothing \\ R_5 &= \varnothing. \end{aligned}$

交换 B0B_0 和 B2B_2 后,得到数组

B=[0,2,1,0,1].B = [0, 2, 1, 0, 1].

可以证明唯一对应此数组的合法算法输出为

A=[2,1,0,1,0].A = [2, 1, 0, 1, 0].

一种可能的算法输入如下:

$\begin{aligned} R_1 &= \{2, 3\} \\ R_2 &= \{4\} \\ R_3 &= \varnothing \\ R_4 &= \{5\} \\ R_5 &= \varnothing. \end{aligned}$

以下表格展示了 25 分的分布情况:

分值 NN 的范围 QQ 的范围
3 分 1≤N≤81 \leq N \leq 8 Q=0Q = 0
7 分 1≤N≤5 0001 \leq N \leq 5\,000
10 分 1≤N≤500 0001 \leq N \leq 500\,000
5 分 0≤Q≤300 0000 \leq Q \leq 300\,000

翻译由 DeepSeek V3 完成