A119994.固定前缀排列
普及+/提高
通过率:0%
时间限制:1.00s
内存限制:128MB
题目描述
给定 n 个长度为 m 的排列 a1,a2,…,an。
长度为 m 的排列,指的是由 1 到 m 这 m 个整数各出现一次组成的序列。
对于一个排列 p1,p2,…,pm,定义它的“固定前缀长度”为最大的整数 k,满足:
p1=1,p2=2,…,pk=k
如果 p1=1,那么它的固定前缀长度为 0。
两个排列 p 和 q 的乘积 p⋅q 定义为一个新排列 r,其中:
rj=qpj
也就是说,第 j 个位置的值等于 q 中第 pj 个位置上的数。
现在,对于每个 i,你需要在所有 aj(1≤j≤n) 中选择一个排列,使得 ai⋅aj 的固定前缀长度尽可能大,并输出这个最大值。
注意:可以选择 j=i。
输入格式
第一行输入一个整数 T,表示测试数据组数。
对于每组测试数据:
第一行输入两个整数 n,m,表示排列个数和每个排列的长度。
接下来 n 行,每行输入 m 个整数,表示一个长度为 m 的排列。
输出格式
对于每组测试数据,输出一行 n 个整数。
第 i 个整数表示:在所有 j 中,ai⋅aj 的固定前缀长度最大是多少。
输入输出样例
输入#1
3 3 4 2 4 1 3 1 2 4 3 2 1 3 4 2 2 1 2 2 1 8 10 3 4 9 6 10 2 7 8 1 5 3 9 1 8 5 7 4 10 2 6 3 10 1 7 5 9 6 4 2 8 1 2 3 4 8 6 10 7 9 5 1 2 3 4 10 6 8 5 7 9 9 6 1 2 10 4 7 8 3 5 7 9 3 2 5 6 4 8 1 10 9 4 3 7 5 6 1 10 8 2
输出#1
1 4 4 2 2 10 8 1 6 8 10 1 7
说明/提示
对于所有测试数据,满足:
- 1≤T≤104
- 1≤n≤5×104
- 1≤m≤10
- 每个 ai 都是一个长度为 m 的排列
- 所有测试数据中 n 的总和不超过 5×104
样例解释
对于第一组测试数据,三个排列分别为:
a1=[2,4,1,3]
a2=[1,2,4,3]
a3=[2,1,3,4]
先看 a1。
如果选择 a3,那么:
a1⋅a3=[1,4,2,3]
这个排列的第 1 个位置是 1,但是第 2 个位置不是 2,所以固定前缀长度为 1。
尝试所有 aj 后,a1⋅aj 的最大固定前缀长度为 1。
再看 a2。
如果选择 a2,那么:
a2⋅a2=[1,2,3,4]
这个排列的前 4 个位置都满足:
p1=1,p2=2,p3=3,p4=4
所以固定前缀长度为 4。
再看 a3。
如果选择 a3,那么:
a3⋅a3=[1,2,3,4]
所以最大固定前缀长度也是 4。
因此第一组测试数据的答案为:
1 4 4
对于第二组测试数据,两个排列分别为:
[1,2]
和
[2,1]
它们都可以通过选择合适的排列,使乘积结果变成:
[1,2]
所以答案为:
2 2