翻译3
查看原帖
翻译3
1001552
newsname楼主2023/8/6 09:09

在这个问题中,当我们提到“排列”时,指的是(1,2,...,N)(1,2,...,N) 的排列。

对于 22 个排列 pp 和 qq,它们之间的距离 d(p,q)d(p,q) 定义如下:

考虑重复地交换 pp 中相邻的 22个元素,直到pp 与 qq 匹配。所需的最小操作次数被定义为 d(p,q)d(p,q)。

此外,对于一个排列 xx,定义排列 f(x)f(x) 如下:

设 y=(1,2,…,Ny=(1,2,\dots,N)。现在考虑满足d(x,z)≤d(y,z)d(x,z)≤d(y,z) 的排列 zz。在这些排列中,选择字典序最小的作为 f(x)f(x)。

例如,对于 x=(2,3,1)x=(2,3,1),满足d(x,z)≤d(y,z)d(x,z)≤d(y,z) 的可能排列 zz 是(2,1,3),(2,3,1),(3,1,2),(3,2,1)(2,1,3),(2,3,1),(3,1,2),(3,2,1)。其中,字典序最小的是 (2,1,3)(2,1,3),所以f(x)=(2,1,3)f(x)=(2,1,3)。

给定一个排列 A=(A1,A2,…,AN)A=(A_1,A_2,\dots,A_N),确定是否存在一个排列x使得f(x)=A。

对于每个输入文件,解决 TT 个测试样例。

字典序是指什么?以下是判断两个不同序列 SS 和 TT 的顺序的算法:

我们将 SS 的第 ii 个元素表示为SiS_i。同时,如果 Si<TiS_i < T_i,则使用 S<TS < T;如果 Si>TiS_i > T_i,则使用S>TS > T。这是为了处理 SS 和 TT 长度不同的情况。

设LL为S和T之间较短序列的长度。对于i=1,2,...,L,检查S_i和T_i是否相同。 如果存在一个ii使得S_i ≠ T_i,则选择最小的ii为jj。然后比较S_j和T_j。如果S_j在数字上小于T_j,则S < T;如果S_j在数字上更大,则S > T。在任一情况下,确定顺序并结束算法。 如果不存在一个ii使得S_i ≠ T_i,则比较S和T的长度。如果S较短,则S < T;如果S较长,则S > T。结束算法。

输入格式 输入通过标准输入以以下格式给出。

TT case1case_1

case2case_2

…\dots

caseTcase_T

每个案例的格式如下。

NN

A1A2...ANA_1A_2...A_N

输出格式:

对于每个案例,如果存在一个排列 xx 使得 f(x)=Af(x)=A ,则输出 Yes。否则,输出No。

2023/8/6 09:09
加载中...