CF2138D.Antiamuny and Slider Movement

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Antiamuny 正在管理 nn 个滑块,这些滑块在一个长度为 mm 的一维轨道上。每个滑块正好占用一个单位长度,并且初始时位于不同的位置。滑块从左到右编号为 11 到 nn,第 ii 个滑块初始时位于位置 aia_i。

现在有 qq 次操作。每次操作由两个整数 i,xi,x 描述(1≤i≤n1 \leq i \leq n,且 i≤x≤m−n+ii \leq x \leq m-n+i)。该操作将第 ii 个滑块移动到位置 xx。然而,如果这个操作会导致与其他滑块发生碰撞(也就是在第 ii 个滑块当前位置和目标 xx 之间存在其他滑块),那么这些阻碍滑块会被按相同方向依次推进一格,直到不再发生碰撞,这可能引发连锁反应(即一个滑块推着另一个滑块移动),直到所有滑块都再次占据不同的位置。

请注意,这些操作不会改变滑块的相对顺序:第 ii 个滑块始终是从左到右的第 ii 个滑块。此外,xx 的约束保证所有滑块位置始终在 11 到 mm 之间,不会出界。

例如,假设初始滑块位置为 [1,3,5,7,9][1,3,5,7,9]。如果将第 55 个滑块(位于 99)移动到 66 号位置,它会推动第 44 个滑块从 77 移动到 55,进一步推动第 33 个滑块从 55 移动到 44。最后滑块的位置为 [1,3,4,5,6][1,3,\textbf{4},\textbf{5},\textbf{6}]。

不幸的是,Antiamuny 忘记了 qq 次操作的应用顺序。为恢复所有结果,他决定独立模拟这 q!q! 种操作顺序的所有排列。对于每一个长度为 qq 的排列 pp,定义 fi(p)f_i(p) 表示在按 pp 的顺序执行所有操作后,第 ii 个滑块的最终位置。

换句话说,从初始位置 a1,a2,…,ana_1,a_2,\ldots,a_n 出发,先执行 p1p_1 指定的操作、再执行 p2p_2 指定的操作,依次至 pqp_q 指定的操作。fi(p)f_i(p) 为这一过程中第 ii 个滑块的最后位置。

你的任务是,对于每个滑块 ii(1≤i≤n1 \le i \le n),计算所有 q!q! 种操作顺序下 fi(p)f_i(p) 的和。由于结果可能很大,请将每个答案对 109+710^9+7 取模后输出。

∗^*一个长度为 qq 的排列是由 11 到 qq 的 qq 个不同整数组成的数组,顺序任意。例如,[2,3,1,5,4][2,3,1,5,4] 是一个排列,[1,2,2][1,2,2] 不是(22 出现了两次),[1,3,4][1,3,4] 也不是(q=3q=3 但有 44)。

输入格式

每组测试包含多组数据。第一行输入测试组数 tt(1≤t≤1031 \le t \le 10^3)。
每组测试数据的第一行为三个整数 nn、mm、qq(1≤n,q≤5×1031 \leq n,q \leq 5\times 10^3,n≤m≤109n \leq m \leq 10^9),代表滑块数量、轨道长度和操作数量。
第二行输入 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n(1≤a1<a2<…<an≤m1 \leq a_1 < a_2 < \ldots < a_n \leq m),分别为初始时每个滑块的位置。
接下来 qq 行,每行两个整数 i,xi,x(1≤i≤n1 \leq i \leq n, i≤x≤m−n+ii \leq x \leq m-n+i),分别表示要移动的滑块编号,以及目标位置。

保证所有测试数据的 nn 和 qq 之和不超过 5×1035\times 10^3。

输出格式

对于每组测试数据,输出 nn 个整数,第 ii 个整数为所有 q!q! 种操作顺序下,第 ii 个滑块的最终位置之和 fi(p)f_i(p) 的和,对 109+710^9+7 取模。

输入输出样例

  • 输入#1

    3
    5 10 3
    1 3 5 7 9
    5 6
    2 6
    1 4
    5 10 5
    2 3 5 7 9
    1 6
    4 7
    3 3
    5 7
    4 9
    3 1000000000 3
    1 10 253746392
    3 100000000
    3 1000000000
    3 500000000

    输出#1

    18 29 35 41 47 
    340 460 580 930 1090 
    6 60 199999979

说明/提示

在第一个测试点中:

  • 若操作顺序为 [2,1,3][2,1,3],那么先执行第 22 个操作,将第 22 个滑块移动到位置 66;再进行第 11 个操作,将第 55 个滑块移动到位置 66;最后进行第 33 个操作,将第 11 个滑块移动到位置 44。每次操作后滑块的位置见下图。最终滑块的位置为 [4,5,6,7,8][4,5,6,7,8]。

  • 若顺序为 [1,2,3][1,2,3],最终滑块位置为 [4,6,7,8,9][4,6,7,8,9]。

  • 若顺序为 [1,3,2][1,3,2],最终滑块位置为 [4,6,7,8,9][4,6,7,8,9]。

  • 若顺序为 [2,3,1][2,3,1],最终滑块位置为 [2,3,4,5,6][2,3,4,5,6]。

  • 若顺序为 [3,1,2][3,1,2],最终滑块位置为 [2,6,7,8,9][2,6,7,8,9]。

  • 若顺序为 [3,2,1][3,2,1],最终滑块位置为 [2,3,4,5,6][2,3,4,5,6]。

对于第 11 个滑块,所有 66 种情况的位置和为 4+4+4+2+2+2=184+4+4+2+2+2=18。

对于第 22 个滑块,所有 66 种情况的位置和为 5+6+6+3+6+3=295+6+6+3+6+3=29。

对于第 33 个滑块,所有 66 种情况的位置和为 6+7+7+4+7+4=356+7+7+4+7+4=35。

对于第 44 个滑块,所有 66 种情况的位置和为 7+8+8+5+8+5=417+8+8+5+8+5=41。

对于第 55 个滑块,所有 66 种情况的位置和为 8+9+9+6+9+6=478+9+9+6+9+6=47。

由 ChatGPT 5 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页